在其他语言中,我可以这样做:
for(int i = 0; i < numObjects; i++)
{
Object obj = new Object();
UI.Display(obj.text = array[i]);
}
我将获得一个包含多个不同文本对象的显示。
然而,当使用ARC打开Xcode 4+中的Objective-C编程时,没有“新的”初始化器。所以,当我做类似的事情时:
for(NSString *s in testArray) {
NSArray nibObjects = [[NSBundle mainBundle] loadNibNamed:@"Page" owner:self options:nil];
UIView subview = [nibObjects lastObject];
... //Add some custom images or text
[scrollView addSubview:subview];
}
我只得到一个视图。我假设因为它仍然引用相同的内存位置。当我在滚动视图中使用它时说5个不同的视图,只有最后一个工作。其余的都是空白的。
关于我应该如何在scrollview中重用自定义nib布局的任何建议?它需要是动态的,因为我添加的数字会发生变化。
- 编辑 -
另一次没有结果的尝试
for (int i = 0; i < 4; i++) {
NSArray *nibObjects = [[NSArray alloc]init];
nibObjects = [[NSBundle mainBundle] loadNibNamed:@"Page" owner:self options:nil];
//Move frame location
CGRect frame;
frame.origin.x = scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = scrollView.frame.size;
UIView *subview = [[UIView alloc] initWithFrame:frame];
subview = [nibObjects lastObject];
[scrollView addSubview:subview];
}
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 4, scrollView.frame.size.height);
答案 0 :(得分:1)
没有'新'初始值设定项
在Objective-C中,您通过向类发送alloc
消息然后向返回的实例发送init...
消息来初始化对象。如果您不知道如何初始化对象,请首先阅读基本的Objective-C文献。
NSArray nibObjects = [[NSBundle mainBundle] loadNibNamed:@"Page" owner:self options:nil];
UIView subview = [nibObjects lastObject];
loadNibNamed
返回一个指向{{}的指针1}}对象。假设您实际上有一个指向BOOL
,而不是NSArray
,即使它返回NSArray
,它也会返回NSArray
NSArray
的指针,UIViews
将始终返回相同的对象(同样,它将返回指向[nibObjects lastObject]
的指针)。