使用Swift2中的“willSelectRowAtIndexPath”从单元格中获取数据

时间:2015-08-23 16:40:38

标签: swift uitableview cell

我在两周后在许多教程的帮助下尝试从TableView单元获取和segue数据。但似乎在XCode中无法做到这一点。只能获取一个单元格的selectedRow,但我无法读出所选单元格的文本标签。

如果用户选择了一个Cell,我想将所选单元格中的标签值转换为新的View Controller。

我只能将选定的行提交给新的View Controller,而不能提供此选定单元格中标签的值。

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
   row = indexPath.row // here is the row the user has selcted
    labelStringOfselectedCell = "??????" // how to retrieve data from a label in the cell?
    return indexPath
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let DestViewController : ViewControllerDetail = segue.destinationViewController as! ViewControllerDetail
    DestViewController.seguedData = labelStringOfselectedCell
}

1 个答案:

答案 0 :(得分:2)

如果你真的想做类似的事情,你可以这样做:

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
    let cell = tableView.cellForRowAtIndexPath(indexPath)  // do not confuse this with the similarly named `tableView:cellForRowAtIndexPath:` method that you've implemented
    let string = cell?.textLabel?.text
    return indexPath
}

显然,这取决于你是否是自定义细胞亚类以及标签是什么,但这说明了基本的想法。

话虽如此,你不应该这样做。你的应用应该遵循Model-View-Controller(MVC)编程范例。在确定要传递给下一个场景的数据时,您应该返回最初填充表时使用的原始模型,而不是指表中的某些控件。

例如,让我们假设您通过从objects模型中检索数据来填充原始单元格:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 
    let object = objects[indexPath.row]
    cell.textLabel?.text = object.name
    return cell
}

然后你只需实现一个prepareForSegue来检索objects中的数据(你根本不必实现willSelectRowAtIndexPath):

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let destination = segue.destinationViewController as? ViewControllerDetail {
        let object = objects[tableView.indexPathForSelectedRow!.row]
        destination.seguedData = object.name
    }
}

显然,这将取决于您的模型是什么以及您最初如何填充单元格,但希望它说明了基本的想法。