经过一番搜索之后,我决定使用“ 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
中进行其余的初始化吗?