swift:prepareForSegue indexPathForSelectedRow

时间:2015-06-30 11:52:28

标签: swift uitableview row segue didselectrowatindexpath

我有一个由cellForRowAtIndexPath填充的UITableView:

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

    var cell: UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("customTableViewCell") as! UITableViewCell
    let task = frc.objectAtIndexPath(indexPath) as! Task

        cell.textLabel?.text = task.summary
        var detail = task.detail
        var context = task.context
        var due = task.date
        var status = task.status
        var responsible = task.responsable
        var folder = task.folder

        cell.detailTextLabel?.text = "Contexte: \(context), Detail: \(detail), Status: \(status), Ending date: \(due)"

    return cell
}

在故事板上,我点击了tableView的一个单元格来打开一个detailViewController

这是我的didSelectRowAtIndexPath:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    self.name = cell!.textLabel!.text!
    println(self.name)
    self.performSegueWithIdentifier("Show Detail", sender: indexPath);
}

和prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    if let identifier = segue.identifier{

        switch identifier {
            case "Show Detail":


                let indexPath = self.tableView.indexPathForSelectedRow()
                let editTaskVC = segue.destinationViewController as! EditTaskViewController

                editTaskVC.Name = "cell.textLabel?.text is what I would like to.."


            default: break
        }
    }

}

如果我editTaskVC.Name = indexPath?.description我可以看到单元格的说明点击,例如<NSIndexPath: 0x78f96ab0>...

是否可以打印单击行的cell.textLabel?.text而不是打印indexPath的描述?

我在论坛上看过很多很多教程或帖子,但我没有成功解决我的问题......

感谢您的帮助。

问候。

2 个答案:

答案 0 :(得分:4)

您打算将cell.textLabel?.text传递给目标视图控制器吗?

你正在绕道而行。 sender中的performSegueWithIdentifier:参数可以包含AnyObject,因此您可以直接前往并传递name

self.performSegueWithIdentifier("Show Detail", sender: name)

这样,prepareForSegue将您需要的项目传递给下一个视图控制器。只需指定editTaskVC = sender as! String,就可以了。

您缺少的知识是,sender中的performSegueWithIdentifier: sender参数会自动将发件人的内容传递给prepareForSegue作为发件人参数。

答案 1 :(得分:3)

由于您已经拥有索引路径,因此您只需调用表cellForRowAtIndexPath即可获取单元格:

if let indexPath = self.tableView.indexPathForSelectedRow() {
    if let cell = self.tableView.cellForRowAtIndexPath(indexPath) as? UITableViewCell {
        let editTaskVC = segue.destinationViewController as! EditTaskViewController    
        editTaskVC.Name = cell.textLabel?.text
    }
}

indexPathForSelectedRow仅在2种情况下返回nil

  • 如果索引超出范围
  • 如果单元格不可见