经过一番搜索之后,我决定使用“ viewWithTag”从loadNibNamed:owner:options返回的主根视图中提取子视图的以下技术:首先,我有点困惑,因为我假设loadNibNamed:owner:当实际上似乎返回根视图(或根视图)时,options将返回包含我的所有UI项(即标签,按钮等)的数组。任何人都可以确认我做的正确吗,我只是好奇是否还有其他(也许更好)的方式从xib文件中提取和设置项目?

- (void)loadView {
    NSLog(@"HYBRID UI: %s", __PRETTY_FUNCTION__);
    NSArray *nibArchive = [[NSBundle mainBundle] loadNibNamed:@"Interface" owner:self options:nil];
    NSLog(@"SIZE: %d ARRAY: %@", [nibArchive count], nibArchive);

    // UIView
    UIView *nibView = [nibArchive lastObject];
    [nibView setFrame:[[UIScreen mainScreen] applicationFrame]];
    NSLog(@"FRAME: %@", NSStringFromCGRect([nibView frame]));
    [self setView: nibView];

    // UILabel
    UILabel *nibLabel = (UILabel *)[nibView viewWithTag:101];
    [nibLabel setText:@"FRINGE"];
    [nibLabel setTextColor:[UIColor whiteColor]];

    // UIImageView
    UIImageView *nibImageView = (UIImageView *)[nibView viewWithTag:102];
    [nibImageView setBackgroundColor:[UIColor whiteColor]];
}


干杯加里

最佳答案

loadNibNamed:owner:options:确实返回NIB中所有根对象的数组。要访问层次结构中的其他对象,您可以手动遍历层次结构(在大多数情况下不是一个好主意),可以像以前一样使用标签或使用插座。

如果在视图控制器中为视图,标签和图像视图声明了出口,并在NIB中将它们连接到适当的对象,则它们将在loadNibNamed:owner:options:中自动连接。

PS:为什么仍然要手动加载NIB?您不能使用initWithNibName:bundle初始化视图控制器,并在viewDidLoad中进行其余的初始化吗?

10-08 15:43