Swift/XCode 6.4:导航控制器的问题(后退按钮和prepareForSegue

Sag*_*usA 1 xcode uitableview ios segue swift

我的前提是我对XCode和Swift完全不熟悉,所以我知道我犯的是愚蠢的错误,但我不知道在哪里.这是我的iOS应用故事板的一部分:

在此输入图像描述

其中第一个表视图和第二个导航控制器之间的segue称为myTaskDetailSegue,其类型为Show(例如Push).现在我有一些问题:

1)既没有在第一个表视图控制器也没有在第二个显示后退按钮,我不知道为什么.许多人告诉我导航栏和后退按钮在导航控制器中是默认的,但它们没有出现

2)在第一个表视图控制器的类中这里是方法prepareForSegue()

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

    if (segue.identifier == "myTaskDetailSegue" ) {
        let indexPath = self.tableView.indexPathForSelectedRow()
        let task = self.taskCollection[indexPath!.row] as Task

        let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailsMyTasksViewController

        controller.detailItem = task

        println("segue mostra task \(task.id)")
        controller.navigationItem.leftItemsSupplementBackButton = true
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以读到segue标识符是正确的,但是当点击一行时没有任何反应,并且没有显示第二个表视图控制器.

由于我的经验不足,我真的不知道自己错过了什么......如果你能帮助我并向我解释这些事情,我将非常感激.谢谢大家

这是完整的故事板: 在此输入图像描述

Vic*_*ler 5

你不需要两个UINavigationController你想达到的目标.重要的是要注意每次推送(使用segue或手动)新的UIViewController它都会添加到导航堆栈中.

根据Apple的说法:

按下视图控制器会在导航界面中显示其视图,并相应地更新导航控件.您通常推送视图控制器以响应当前视图控制器中的用户操作 - 例如,响应用户点击表中的行.

因此,您可以删除UINavigationController故事板中的第二个并将segue直接发送给您,DetailsMyTaskViewControllerprepareForSegue通过以下方式更新您的类似内容:

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

   if (segue.identifier == "myTaskDetailSegue" ) {

       let indexPath = self.tableView.indexPathForSelectedRow()
       let task = self.taskCollection[indexPath!.row] as Task

       let controller = segue.destinationViewController as! DetailsMyTasksViewController

       controller.detailItem = task
       println("segue mostra task \(task.id)")
   }
}
Run Code Online (Sandbox Code Playgroud)

如前所述,您的后退按钮应默认显示.不过我强烈建议您阅读以下两个指南:

为了更好地理解导航堆栈等.

我希望这对你有帮助.