从/与nib加载/初始化辅助UITabBarController

时间:2011-03-25 18:39:20

标签: iphone objective-c initialization uitabbarcontroller nib

在我正在尝试开发的应用程序中,我将UINavigationController作为根控制器。我使用相当常见的代码初始化视图:

MySubclassOfViewController *vc = [[MySubclassOfViewController alloc]
                                  initWithNibName:@"MySubclassOfViewController"
                                  bundle:nil];
vc.title = @"A title";
[self.navigationController pushViewController:vc animated:YES];
[vc release];

在一些视图连续之后,我想加载UITabBarController。

  1. 有没有办法设计nib文件并以与上面相同的方式创建UITabBarController 的实例?
    我知道我可以通过编程方式或明确声明一个插座并将其与笔尖中的控制器连接。也可以使用

    之类的东西来初始化控制器
    NSArray *objects = [[NSBundle mainBundle]
                         loadNibNamed:@"MySubclassOfViewController"
                         owner:self
                         options:nil];
    self = [objects objectAtIndex:0];
    [objects release];
    

    但是,如果没有额外的工作,我可以做到吗?打字?

  2. 假设我定义了一个UITabBarConroller的子类(虽然我知道它在Apple文档中是不鼓励的,但仅仅是出于好奇)。当我创建子类的实例时,我能以某种方式从笔尖加载超类部件吗?

1 个答案:

答案 0 :(得分:1)

我自己解决了我的问题。经过一些研究,我得出了这些结论。

  1. 可能以相同的方式执行(即UITabBarController *tbc = [[UITabBarController alloc] initWithNib...)控制器应该有一个额外的插座,或者控制器应该明确地alloc / init'ed(但不是initWithNibName),或者可以使用loadNibNamed进行实例化。 就是这样。这样做的原因是标签栏控制器没有声明连接到子视图控制器的插座。 (有关加载笔尖的更多详细信息,请检查Development Chaos Theory blog)。
  2. 如果上一个答案是“”,那么我所要做的就是将Interface Builder中的自定义类设置为我的子类。这适用于其他对象(嗯,可能是UINavigationController除外,它也不用于子类化)。但由于标签栏控制器的“简单”初始化是不可能的,所以这也是不可能的。
  3. 对此有何评论? :)功能