Ios 从UITableViewController中的选定行获取选定标签文本

Ios 从UITableViewController中的选定行获取选定标签文本,ios,swift,uitableview,Ios,Swift,Uitableview,我对斯威夫特还是新手,所以请容忍我 目前我已经从一个JSON文件中加载了数据,然后显示在各个单元格中 我有一个自定义单元类,它有必要的标签插座(名称和编号) 我要做的是,在给定行上从指定的标签文本检索数据,然后将其传递到另一个ViewController e、 g.第3行有两个标签,“数据”和“2004”。我已经选择了第3行,希望获得该单元格的“2004”值,并将其分配给一个变量,然后该变量可以传递给另一个ViewController。(“2004”将被视为我的自定义单元格类别(即单元格编号)中

我对斯威夫特还是新手,所以请容忍我

目前我已经从一个JSON文件中加载了数据,然后显示在各个单元格中

我有一个自定义单元类,它有必要的标签插座(名称和编号)

我要做的是,在给定行上从指定的标签文本检索数据,然后将其传递到另一个ViewController

e、 g.第3行有两个标签,“数据”和“2004”。我已经选择了第3行,希望获得该单元格的“2004”值,并将其分配给一个变量,然后该变量可以传递给另一个ViewController。(“2004”将被视为我的自定义单元格类别(即单元格编号)中的数字标签插座)

以下是一些可能会有所帮助的代码:

表视图控制器

import UIKit

class TableViewController: UITableViewController, UINavigationControllerDelegate {

    @IBOutlet var segmentedSortOption: UISegmentedControl!
    var array : NSArray = DataClass.dataStruct.jsonResult["data"] as NSArray

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var myCell:cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as cell
        var upperCasedNames = array[indexPath.row]["name"] as? String

        if segmentedSortOption.selectedSegmentIndex == 0 {

            myCell.No.text = array[indexPath.row]["no"] as? String

        } else if segmentedSortOption.selectedSegmentIndex == 1 {

            if let unsortedEvents = DataClass.dataStruct.jsonResult["data"] as NSArray {

                let descriptor = NSSortDescriptor(key: "name", ascending: true, selector: "caseInsensitiveCompare:")
                let aToZ = unsortedEvents.sortedArrayUsingDescriptors([descriptor])

                myCell.No.text = aToZ[indexPath.row]["no"] as? String
            }  
        }    
        return myCell
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "selectedItem" {
            if let indexPath = self.tableView.indexPathForSelectedRow() {
                let destinationController = segue.destinationViewController as ViewController
                destinationController.eventData = indexPath.row as Int   
            }   
        } 
自定义单元格类

import UIKit

class cell: UITableViewCell {

    @IBOutlet var name: UILabel!

    @IBOutlet var number: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}
如果你还有任何问题,请一定要问

如果你有更好的选择,也请提出建议

谢谢


编辑:忘记提到一个关键问题。有一个分段控件,它将数据从JSON文件中的给定顺序重新组织为字母顺序。在A-Z视图的实例中,indexath.row单元格变得毫无用处,因为顺序完全不同。

在您的
prepareforsgue
中,您需要获取使用
cellforrowatinexpath
选择的单元格(与
tableView不同(tableView:UITableView,cellforrowatinexpath
)然后将其传递给
目标控制器
,请参见以下示例:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "selectedItem" {
        if let indexPath = self.tableView.indexPathForSelectedRow() {

            // get the cell associated with the indexPath selected.
            let cell = self.tableView.cellForRowAtIndexPath(indexPath) as cell!

            // get the label text to pass to destinationController
            var text1 = cell.name.text
            var text2 = cell.number.text

            let destinationController = segue.destinationViewController as ViewController
            destinationController.eventData = indexPath.row as Int   
        }   
    } 
}

我希望这能对你有所帮助。

好吧,我对斯威夫特也不熟悉,所以请容忍我。我有几种方法可以做到这一点

1) 您是从JSON文件向这个tableview中抛出数据,对吗?因此,根据项目的结构,您可以单击索引(行)并使用它从JSON获取相关数据

let indexPath = tableView.indexPathForSelectedRow();
然后将该整数indexath传递给您用来获取相关数据的JSON解析库

2) 我不确定您的实现的自定义特性是如何改变事情的,但可能有您的答案


3) 更像是一个hack-y解决方案,但是当您填充这个UITableView时,您可以将每个单元格的标记设置为其索引,然后您就可以通过标记获取它并以这种方式检索它的标签值(如中所示)

感谢您的输入,但我最初使用的是您的第一个建议,但在新的A-Z排序之后,它使该函数变得多余。我还检查了第一个链接,这对我没有帮助,因为我使用的是自定义单元格类,但是第二个链接看起来在不久的将来会派上用场。谢谢:)当然,很抱歉我没有完全阅读/理解你的问题:)无论如何祝你好运!如果你按照我的第三个想法提出了一个解决方案,请随意建议将代码作为对答案的编辑,我将整合它。非常感谢!真不敢相信事情竟如此简单!!多多少少花了一整天的时间想弄明白这一点哈哈,再次感谢维克多,非常感谢:DGlad能帮助你。它总是一个很好的参考阅读苹果的TableView编程指南,即使是在Objective-C中!!,但你可以从指南中学到很多。讽刺的是,我使用了相同的代码,但把它放在了DidSelectRowatinex中,我甚至没有想到要把它放在那里;但确实有道理。从现在起,我一定会看看指南。再次感谢维克多:)