如何在多个UIViewControllers之间共享一个故事板场景

Ped*_*dro 15 uiviewcontroller ios uistoryboard segue uistoryboardsegue

我完全重新制定了这个问题,因为我知道我原本偏离轨道但是让我无法解决问题.参考这张图片...... 故事板图

我想要在代码中创建或操作segue(以黄色突出显示),以便主视图是MFMasterViewController(以红色突出显示)的多个子类中的任何一个.

做这个时使用笔尖我可以创建一个笔尖,SharedNib.xib和设置类的MFMasterViewController,然后创建我的子类,比方说MFMasterViewControllerSubclassA,MFMasterViewControllerSubclassB等和然后实例化我想要使用哪个子...

MFMasterViewControllerSubclassA *controller = [[MFMasterViewControllerSubclassA alloc] initWithNibName:@"SharedNib" bundle:nil];
Run Code Online (Sandbox Code Playgroud)

要么...

MFMasterViewControllerSubclassB *controller = [[MFMasterViewControllerSubclassB alloc] initWithNibName:@"SharedNib" bundle:nil];
Run Code Online (Sandbox Code Playgroud)

等等

关于如何使用故事板来解决这个问题的任何线索?

在我的情况下,想要这样做的原因是我的所有子类都是相同的tableview和数据,但排序方式不同,并且对于写入cels详细文本的内容有所不同.我怀疑这是一种并不罕见的模式.

干杯和TIA,佩德罗:)

Fel*_*ano 5

这不是一个直接的答案,但这就是我根据你对原因的解释完成你想要的东西.

基本上你需要将UITableViewDataSource(也可能是委托)分开,MFMasterViewController因此当执行segue时,你可以在视图控制器中设置正确的dataSource和delegate.

因此,在导航控制器中,您需要实现该prepareForSegue:sender:方法.这是您可以在执行之前自定义segue的地方:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // you can set the segue identifier using Interface Builder 
    // also it is a good thing to make sure which segue you're using
    if (([segue identifier] isEqualToString:@"TheId"]) {
       id<UITableViewDataSource> dataSource = [[TableViewDataSourceImplementationA alloc] init];
       [[[segue destinationViewController] tableView] setDataSource:dataSource];
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以获得所需的自定义,而无需创建视图控制器的子类.

如果您可以访问WWDC视频,请查看会话#407在您的应用中采用故事板.