如何在多个UIViewControllers之间共享一个故事板场景
我完全重新制定了这个问题,得知我本来是偏离了轨道,但是我没有接近解决问题。 参照这个图像…
我想要在代码中创build或操作segue(以黄色突出显示),这样Master视图就是MFMasterViewController
的多个子类中的任何一个(以红色突出显示)。
当使用Nibs这样做时,我可以创build一个Nib, SharedNib.xib
并将该类设置为MFMasterViewController
,然后创build我的子类,比如说MFMasterViewControllerSubclassA
, MFMasterViewControllerSubclassB
等等,然后实例化任何我想使用的子类。
MFMasterViewControllerSubclassA *controller = [[MFMasterViewControllerSubclassA alloc] initWithNibName:@"SharedNib" bundle:nil];
要么…
MFMasterViewControllerSubclassB *controller = [[MFMasterViewControllerSubclassB alloc] initWithNibName:@"SharedNib" bundle:nil];
等等
任何线索,如何我可以使用故事板得到这个权利?
在我的情况下,想要做到这一点的原因是,我所有的子类是相同的tableview和数据,但sorting不同,并在写入到cels的细节文本的东西有一些不同。 我怀疑这是一个不常见的模式。
干杯和TIA,佩德罗:)
这不是一个直接的答案,但这是我如何根据你对原因的解释完成你想要的。
基本上你需要从MFMasterViewController
分离出UITableViewDataSource
(也可能是委托),所以当执行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]; } }
这样你可以得到你想要的定制而不需要创build视图控制器的子类。
如果您有权访问WWDCvideo,请检查会话#407在应用程序中采用情节串联图板。
对于任何人都在这个问题上磕磕绊绊,你还应该更一般地考虑使用“策略”模式作为子类化控制器的替代scheme。 被接受的答案就是这样一种forms,即所实施的策略来自任何数据源/代表,并且可以在运行时切换出来。 另一个例子是https://stackoverflow.com/a/17381927/954643
如果.m文件没有与任何故事板相关联,那么self.storyboard是不是Nil?
UIStoryboard *storyboard = [UIStoryboard storyboardWithName: @"MainStoryboard" bundle:[NSBundle mainBundle]]; ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"];
确保将storyboardWithName更改为任何您的故事板被命名。
NSString * storyBoardName; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { storyBoardName = @"MainStoryboard_iPad"; } else { storyBoardName = @"MainStoryboard_iPhone"; } UIStoryboard *storyboard = [UIStoryboard storyboardWithName: storyBoardName bundle:[NSBundle mainBundle]]; ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HauptMenu"];
我相信我终于find了答案。 我们想用另一个类名称来使用Storyboard ViewController。 有很多解决方法,如使用代表,但我认为这是最好的。 我已经在另一个话题上回答了。 希望能帮助到你! https://stackoverflow.com/a/32103618/1943053
- 使用ELCImagePickerController来selectvideo
- 使用UIImagePickerController“创build未知types的图像格式是一个错误”
- XCTest中的快照测试
- Swift:以编程方式从xib加载自定义UIView
- ios如何捕捉屏幕的特定部分
- 为什么UICollectionView与UICollectionViewFlowLayout不显示单元格,但要求大小?
- 如何在Xamarin iOS中使用蓝牙低功耗协议发布制造商特定的数据?
- 倒数计时器 – iPhone
- 从plist获取数据到NSMutableArray并将NSMutableArray写入同一个plist iPhone