场景: Master(TableView) - >详情。
Modus Operandi:选择行 - >显示DetailVC
如下所示,我在MasterVC
中嵌入了UINavigationController
:
我目前通过将其推入UINavigationController的VC堆栈来显示DetailVC:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("tableView didSelectRowAtIndexPath")
let storyboard = UIStoryboard(name: "Bliss", bundle: nil);
let controller = storyboard.instantiateViewControllerWithIdentifier("DiaryPlayerVC") as DiaryPlayerViewController
self.navigationController?.pushViewController(controller, animated: true)
}
这很好用。
但是,'prepareForSeque'不会触发:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDiaryPlayer" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
let object = objects[indexPath.row] as NSDate
// (segue.destinationViewController as DiaryPlayerViewController).detailItem = object
}
}
}
我知道我可能在这里有两(2)个相互矛盾的范例:
1)使用UINavigationController vs
2)使用故事板关系。
所以...
选项1 :似乎我可以移除Segue链接以使故事板独立DetailVC
。
选项2 :通过Segue,我假设我可以从链接中删除UINavigatorController
。
我目前正在使用选项#1,通过DetailVC
启动UINavigationController
。
问题:如果我选择选项#2,如何从Master's Row访问(启动)DetailVC
(“日记播放器”),从而触发Segue的'prepareForSegue()'
?
答案 0 :(得分:0)
答案:从表格视图单元格到详细视图控制器创建一个segue。
答案 1 :(得分:0)
您的屏幕截图显示您已在故事板中创建了一个segue。在该属性检查中为该segue指定一个标识符。然后,您只需在didSelectRowAtIndexPath
方法中执行segue:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("tableView didSelectRowAtIndexPath")
performSegueWithIdentifier("mySegueIdentifier", sender: nil)
}
注意:按住Ctrl键拖动TableViewController图标中的segue,而不是从TableViewCell拖动。