iOS Segue 跳转

需求

现在有2个View,第一个View(SummaryView)中包含了一个TableView,第二个View(DetailView)中包含了一个TextView,其内容显示的是对应第一个TableView中的某一行的详细内容。当点击SummaryView中的某一行后,跳转到DetailView显示其详细信息。 Alt none

显示摘要信息的TableView Alt none

显示详细信息的View

自动跳转

自动跳转的方式极其简单,甚至不需要自己写任何一行代码,但是它存在一些数据传递的问题,这个问题的下次在说。 选中TableView中的TableViewCell,使用快捷键(Ctrl + 3指)跟DetailView中的DetailViewController建立一个Segue,在弹出的菜单中选择Push。建立Segue后如下图: Alt none

Segue

选中Segue打开Attribute inspector,设置Identifier为showDetail。 Alt none

选择Segue

Alt none

设置Segue标识

prepareForSegue:sender方法会在View跳转的时候被回调, 可以在这里处理一些跳转过程事务:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showDetail"]) {
        NSLog(@"prepareForSegue:sender invoked: %@", self.description);
    }
}

前面说过使用自动跳转的方法会有一些局限性,比如数据的传递问题。很多时候还是需要使用代码的方式来手动跳转。

手动跳转

同样的需要在SummaryView和DetailView之间建立Segue,但是这次不是在TableViewCell和DetailViewController之间,而是在SummaryViewController(TableView所在的ViewController)和DetailViewController之间建立Segue。 选中SummaryViewController,使用快捷键(Ctrl + 3指)跟DetailViewController建立一个Segue,在弹出的菜单中选择Push。 Alt none

选中SummaryViewController Alt none

建立Segue后的状态

跟第一种方法一样设置Segue的Identifier为showDetail。

最后调用performSegueWithIdentifier:sender:实现View跳转:

[self performSegueWithIdentifier:@"showDetail" sender:self];