我创建了一个新的“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/

10-11 14:42