-1

在其他语言中,我可以执行以下操作:

for(int i = 0; i < numObjects; i++)
{
    Object obj = new Object();
    UI.Display(obj.text = array[i]);
}

我将得到一个显示多个具有不同文本的对象。

但是,当在 Xcode 4+ 中使用 ARC 进行 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 个不同视图的滚动视图中使用它时,只有最后一个有效。其余为空白。

关于我应该如何在滚动视图中重用自定义笔尖布局的任何建议?随着我添加的数字发生变化,它需要是动态的。

-编辑-

再次尝试没有结果

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);
4

1 回答 1

1

没有“新”初始化程序

在 Objective-C 中,您通过向alloc类发送消息然后init...向返回的实例发送消息来初始化对象。如果您不知道如何初始化对象,请先阅读基本的 Objective-C 文献。

NSArray nibObjects =  [[NSBundle mainBundle] loadNibNamed:@"Page" owner:self options:nil];
UIView subview = [nibObjects lastObject];

loadNibNamed返回a BOOL,而不是 an NSArray,即使它返回 anNSArray它也会返回一个指向NSArray对象的指针。假设您实际上有一个指向NSArrayof的指针UIViews[nibObjects lastObject]总是会返回相同的对象(同样,它会返回指向 的指针UIView)。

于 2013-08-03T07:00:23.940 回答