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

时间:2015-08-13 21:43:30

标签: ios swift uitableview

我还是Swift的新手,所以请耐心等待。

目前,我已从JSON文件加载数据,然后将其显示在单个单元格上。

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

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

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

以下是一些可能有用的代码:

表视图控制器

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文件中给定顺序的数据重新组织为字母顺序。单元indexPath.row在A-Z视图的实例中变得无用,因为顺序完全不同。

2 个答案:

答案 0 :(得分:2)

prepareForSegue中,您需要使用cellForRowAtIndexPath(不是tableView(tableView: UITableView, cellForRowAtIndexPath}并且将其传递给destinationController来获取您被选中的单元格,请参阅以下示例:

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 :(得分:0)

好吧,我也是Swift的新手,所以请耐心等待。我看到了几种方法。

1)您正在从JSON文件中将数据投入此tableview,对吧?因此,根据项目的结构,可能只需单击索引(行)并使用它从JSON获取关联数据。

let indexPath = tableView.indexPathForSelectedRow();

然后将整数indexPath传递给您用于获取关联数据的任何JSON解析库。

2)我不确定您的实施的自定义性质如何改变,但可能this more generic question有您的答案。

3)更多的hack-y解决方案,但是当您填充这个UITableView时,您可以将每个单元格的标记设置为其索引,然后您可以通过标记获取它并以此方式检索其标签值(如在this SO answer)?