Master-Detail:导航控制器与故事板Segue

时间:2014-11-01 19:13:57

标签: swift uistoryboard master-detail

场景: Master(TableView) - >详情。
Modus Operandi:选择行 - >显示DetailVC

如下所示,我在MasterVC中嵌入了UINavigationController

enter image description here

我目前通过将其推入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()'

2 个答案:

答案 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拖动。