Bar*_*rtu 1 iphone cocoa-touch objective-c ios
我已经为我的自定义创建了一个xib文件,UIView并将我的xib加载到我的自定义UIView中;
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ProductDetailView" owner:self options:nil];
self = [views objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
我不想将我的所有子视图定义为IBOutlets,所以我认为迭代子视图会更合适.
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这会更强大,但由于UILabels继承自UIViews,我不能使用这种方法.我知道更改if命令可以使它工作,但依赖于if-clauses命令感觉不太好
我要问的是,在这种情况下最合乎逻辑的方法是什么?我应该使用viewWithTag:函数而不是循环ids和转换吗?
你可以用IBOutletCollection.您创建一个数组UILabels和一个数组UIViews
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *labels;
@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *views;
Run Code Online (Sandbox Code Playgroud)
所有你要做的就是创建@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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |