gpt4 book ai didi

iphone - 遍历 subview - 如何访问所有 UI 对象

转载 作者:行者123 更新时间:2023-12-01 17:26:39 25 4
gpt4 key购买 nike

我为我的自定义 UIView 创建了一个 xib 文件并将我的 xib 加载到我的自定义 UIView 中和;

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ProductDetailView" owner:self options:nil];
self = [views objectAtIndex:0];

我不想将我所有的 subview 都定义为 IBOutlets,所以我认为迭代 subview 会更合适。
        for (id subview in self.subviews) {
if ([subview isKindOfClass:[UIView class]]) {
UIView *theView = (UIView*)subview;
if (theView.tag == 16) {
// tag 16 is specific to some UIViews... do stuff
}
}
else if ([subview isKindOfClass:[UILabel class]]) {
UILabel *theLabel = (UILabel*)subview;

if (theLabel.tag == 21) {
// tag 17 is specific to some UILabels... do stuff
}
else
{
// no tag... do stuff
}

}
}

我认为这会更健壮,但是因为 UILabel s 继承自 UIView s,我不能使用这种方法。我知道更改 if 订单可以使其正常工作,但依赖 if 子句的订单感觉不太好

我要问的是,在这种情况下最合乎逻辑的方法是什么?我应该使用 viewWithTag:函数而不是循环 id砂模类型转换?

最佳答案

您可以使用 IBOutletCollection .您创建了一个 UILabels 的数组和 UIViews 的数组

 @property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *labels;
@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *views;

要使用它,您所要做的就是创建 @property在上面和在 IB 中,将您想要分组的所有标签连接到此集合,就像您连接 IBOutlet 一样。当您想遍历它们时:
for (UILabel *label in self.labels) {
NSLog(@"labelTag:%i", label.tag);
// Do what you want with this label
}

for (UIView *view in self.views) {
NSLog(@"viewTag:%i", view.tag);
// Do what you want with this view
}

关于iphone - 遍历 subview - 如何访问所有 UI 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14773154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com