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

我完全重新制定了这个问题,了解到我最初离线,但让我没有更多的解决问题.参考这个图像…

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

当使用Nibs进行此操作时,我可以创建一个Nib,Sharednib.xib&将类设置为MFMasterViewController,然后创建我的子类,说MFMasterViewControllerSubclassA,MFMasterViewControllerSubclassB等.然后实例化我想要使用的子类

MFMasterViewControllerSubclassA *controller = [[MFMasterViewControllerSubclassA alloc] initWithNibName:@"Sharednib" bundle:nil];

要么…

MFMasterViewControllerSubclassB *controller = [[MFMasterViewControllerSubclassB alloc] initWithNibName:@"Sharednib" bundle:nil];

等等

关于我如何使用故事板获得这个权利的任何线索?

在我的情况下,想要这样做的原因是我所有的子类都是相同的tableview&数据但排序不同&在写入电子邮件的详细文本中有一些区别.我怀疑这是一个不常见的模式.

干杯& TIA,
佩德罗:)

解决方法

这不是一个直接的答案,而是根据你对原因的解释,我将如何完成你想要的.

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

所以在导航控制器中你需要实现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];
    }
}

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

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...