我有一个由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的描述?
我在论坛上看过很多很多教程或帖子,但我没有成功解决我的问题......
感谢您的帮助。
问候。
答案 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
: