10

我和佩德罗在这里有同样的问题,但对答案不满意,因为已经有赏金和奖励,所以我创建了这个问题,我会尽快添加赏金。

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

故事板插图

使用 Nibs 执行此操作时,我可以创建一个 Nib,SharedNib.xib并将类设置为MFMasterViewController,然后创建我的子类,例如 MFMasterViewControllerSubclassAMFMasterViewControllerSubclassB 等等,然后实例化我想要使用的任何子类...

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

或者...

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

等等

关于我如何使用情节提要来做到这一点的任何线索?

我不能对 Pedro 的问题使用提供的答案,我的子类化超出了数据源和委托。

4

2 回答 2

0

您可以将未连接的视图控制器添加到情节提要中并为它们提供标识符。然后在代码中,您可以在导航控制器子类中执行以下操作:

MFMasterViewControllerSubclassA *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SubclassA"];
self.viewControllers = @[controller];

这会将导航控制器的根视图控制器更改为控制器。如果您想为更改设置动画,那么您可以使用 setViewControllers:animated: 而不是第二行。

于 2012-11-28T19:16:21.990 回答
0

我知道这是一个旧帖子,但我想我会回应,因为它还没有被回答。这并不难做到。无论您希望在何处引用您的超类,只需通过适当的子类引用它即可。子类包含超类所做的一切。有很多方法可以做到这一点,具体取决于您希望如何进行转场。如果您使用的是 prepareForSegue ,请这样做:

  1. 从按钮或其他任何东西创建一个segue。
  2. 为其分配一个 id
  3. 将您的子类导入 .m 文件
  4. 在 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";
            }
       }
    

这是非常有限的,因为您正在共享故事板场景并且没有场景的子类。例如,您必须隐藏元素,然后在使用特定子类实例化时取消隐藏它们。另一种方法是根据你从哪里开始在一个类上设置一个布尔值,然后编写条件代码。后一种方式可能被认为有点代码味道,但它比复制故事板要好,这可能是一个非常糟糕的主意。

于 2014-05-22T14:54:26.330 回答