我遇到与Pedro here相同的问题,但对答案不满意,因为已经有了奖励和奖励我创建了这个问题,我会尽快添加赏金。
我想在代码中创建或操作segue(以黄色突出显示),以便主视图是MFMasterViewController
的多个子类中的任何一个(以红色突出显示)。
当使用Nibs执行此操作时,我可以创建一个Nib,
SharedNib.xib
&组 作为MFMasterViewController
的类,然后创建我的子类MFMasterViewControllerSubclassA
,MFMasterViewControllerSubclassB
等等然后实例化我想要使用的子类......MFMasterViewControllerSubclassA *controller = [[MFMasterViewControllerSubclassA alloc] initWithNibName:@"SharedNib" bundle:nil];
...或
MFMasterViewControllerSubclassB *controller = [[MFMasterViewControllerSubclassB alloc] initWithNibName:@"SharedNib" bundle:nil];
等
关于如何使用故事板来解决这个问题的任何线索?
我不能在Pedro的问题上使用提供的答案,我的子类扩展超出了数据源&委派。
答案 0 :(得分:0)
您只需将未连接的视图控制器添加到故事板并为其提供标识符即可。然后在代码中,您可以在导航控制器子类中执行以下操作:
MFMasterViewControllerSubclassA *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SubclassA"];
self.viewControllers = @[controller];
这会将导航控制器的根视图控制器更改为控制器。如果要为更改设置动画,则可以使用setViewControllers:animated:而不是第二行。
答案 1 :(得分:0)
我知道这是一个老帖子,但我想我会回复,因为它尚未得到答复。这并不难做到。无论您希望引用哪个超类,只需通过相应的子类引用它。子类包含超类所做的一切。根据您希望如何进行细分,有很多方法可以做到这一点。如果你正在使用prepareForSegue,那么就这样做:
在prepareForSegue中执行以下操作。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"YourID"]) {
SubclassA *subA = segue.destinationViewController; // the file's owner in the storyboard is set to the super class
subA.someString = @"subclass A is setting this";
}
}
由于您正在共享故事板场景并且没有场景的子类,因此这非常有限。例如,您必须隐藏元素,然后在使用特定子类实例化时取消隐藏它们。另一种方法是根据你所在的位置在一个类上设置一个布尔值,然后编写条件代码。后一种方式可能被认为是一种代码味道,但它比复制故事板更好,这可能是一个非常糟糕的主意。