【问题标题】:Is inheritance supported for view controllers and nibs视图控制器和 nib 是否支持继承
【发布时间】:2011-04-11 10:49:56
【问题描述】:

我正在为我的应用程序支持的每个方向创建 2 个视图控制器和 2 个 nib——apple 推荐的纵向和横向。

问题是我将有大量重复的代码 - 继承会在接口生成器中工作吗?

即我可以在基类中声明一个 iboutlet 标签并将其用于两个笔尖吗?

编辑:我有 2 个控制器,都继承自基本控制器。我可以在基础中有我的 IBactions 和 IBOutlets 以及数组和 tableview 委托代码,然后从 2 个不同的 nib 链接它吗?我试图摆脱一些重复

【问题讨论】:

    标签: iphone


    【解决方案1】:

    问:我可以在基类中声明一个 iboutlet 标签并将其用于两个 nib 吗?

    答:是的,它会起作用,使用 initWithNibName 用所需的 Nib(xib) 初始化控制器。

    【讨论】:

    • 您能否在我上次编辑后更新您的答案(如果有任何更改)。在我走这条路之前,我只是想确定一下——如果它有效,它将为我节省很多时间!
    • @thelearner 是的,这是可能的。您可以尝试一个简单的 1 IBOutlet,它应该需要 3 分钟 :)
    • @inovation - 只是为了让您知道这不起作用,因为当子类调用 super dealloc 时,它会释放其他孩子可能需要的所有出口和控件。看到这个问题:tinyurl.com/3m5nh75
    • @thelearner 我不明白,你不是有两个实例: vController1 和 vController2 吗?调用 vController1 [super doSomething] 不会影响 vController2。
    【解决方案2】:

    我刚刚发布了here,但我认为您也可以从中受益。

    我知道这是一个老帖子,但我刚刚发现了一篇令人难以置信的博文 here

    本质上,您必须遍历父类的所有视图并将它们作为子视图添加到您的子类。以下是我在项目中实现它的方式:

    // ChildViewController.m
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self addSubviewsFromSuperclass];  
    }
    
    // ParentViewController.h
    - (void)addSubviewsFromSuperclass;   
    
    // ParentViewController.m
    - (void)addSubviewsFromSuperclass
    {
        UIView *selfView = self.view;
        UIView *nibView = nil;
        @try
        {
            nibView = [NSBundle.mainBundle loadNibNamed:NSStringFromClass([self superclass]) owner:self options:nil][0];
        }
        @catch (NSException *exception)
        {
            NSLog(@"Something exceptional happened while loading nib:\n%@", exception);
        }
        self.view = selfView;
        for (UIView *view in nibView.subviews)
        {
            [self.view addSubview:view];
        }
    }
    

    那个 addSuviewsFromSuperclass 方法不是我的编码。我必须完全归功于我上面提到的博文的作者。下载他的示例项目,你会在他的 JMViewController.m 中找到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多