我从XIB实例化多个克隆视图,如下所示:
UIView *view = [[NSBundle mainBundle] loadNibNamed:@"MyNib" owner:self options:nil][0];
然后我需要访问每个视图的子视图(例如,更改标签)。 使用IBOutlet连接元素在这里不起作用(因为引用将被重写但最近的视图被实例化)。
到目前为止,这是我最好的一次拍摄:
for (UIView *subview in myView.subviews) {
if ([subview.restorationIdentifier isEqualToString:@"myTargetElement"]) {
// do something with the view
break;
}
}
所以我基本上通过子视图迭代来通过restorationIdentifier找到我的元素。我想知道是否有办法在没有迭代的情况下获得直接引用?
答案 0 :(得分:3)
您可以使用IBOutlets。需要将它们设置为自定义视图子类,而不是添加视图的视图控制器。这样的事情很好,
#import "ViewController.h"
#import "RDView.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
RDView *view = [[NSBundle mainBundle] loadNibNamed:@"RDView" owner:self options:nil][0];
[self.view addSubview:view];
view.topLabel.text = @"Hello";
view.bottomLabel.text = @"Goodbye";
}
答案 1 :(得分:1)
出口参考有什么问题?我认为它的效果会很好 重要的是你如何进行点引用。
示例:
UIView *view = [[NSBundle mainBundle] loadNibNamed:@"MyNib" owner:self options:nil][0];
//...
UIView *view_1 = [[NSBundle mainBundle] loadNibNamed:@"MyNib" owner:self options:nil][0];
//...
[view.someLabel setText:@"1"];
[view_1.someLabel setText:@"2"];
无论如何......或者,您可以为subview
提供特定标记,并通过-viewWithTag:
方法访问它们。
示例:
假设您的UILabel
'中的MyNib
标记为100,那么您可以通过以下方式引用它:
[view viewWithTag:100];
//like so:
//UILabel *lblTemp = [view viewWithTag:100];
//[lblTemp setText:@"NewText"];