我创建了一个新的“Tab Bar应用程序”项目,该项目为我提供了FirstViewController.xib和SecondViewController.xib。
在AppDelegate
中,选项卡栏控制器的配置如下:
UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;
显然,这从nib文件中加载了
UIViewController
的实例,不是吗?但是,当我打开SecondViewController.xib时,我看到的唯一根级对象是视图控制器的视图。这对我来说没有任何意义,因为我相信整个UIViewController
实例实际上就是从那个笔尖出来的。其余在哪里?为什么看不到标题的
UIViewController
属性?当我单击“文件所有者”时,“身份”选项卡显示“SecondViewController”,因此“文件所有者”绝对是UIViewController
,但似乎没有保存在笔尖中。实际上,该实例似乎是通过编程方式创建的,而笔尖似乎仅存档视图。这很混乱,因为nib文件的名称是SecondViewController.xib。有人可以澄清吗?
最佳答案
实际上,SecondViewController的实例来自SecondViewController.h。当您使用initWithNibName:@“SecondViewController”时,它将加载笔尖及其属性,但是,如果您想更改任何这些对象,则需要使用接口构建器将它们连接到SecondViewController。
重现您的问题,我可以使用以下视图获取SecondViewController.xib:
视图
标签-第二视图
文字检视
如果您查看SecondViewController.m,则可以在方法中看到其更改标题
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"Second", @"Second");
self.tabBarItem.image = [UIImage imageNamed:@"second"];
}
return self;
}
关于iphone - 当它是文件的所有者时,为什么不能在Interface Builder中编辑UIViewController的属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12785555/