我正在尝试将UILabel
放在NSDictionary
内,我使用标签作为密钥,但问题是,并非所有视图内的标签都需要,所需的UILabel
标签也在枚举内。
所以我想做的是,检查标签是否存在于枚举内部,然后将其添加到字典中,标签为关键字。
for (NSObject *obj in [self.formView subviews]) {
if ([obj isKindOfClass:[UILabel class]]) {
UILabel *label = (UILabel *)obj;
// Here is where I want to add the check before I do this line
labelDict[[NSString stringWithFormat:@"%d",label.tag]] = label;
}
}
对于未来的读者:
如果您也在迭代NSArray类型的对象,如上面的代码,您应该使用NSArray函数enumerateObjectsUsingBlock
代替,这是答案,看起来不是更多漂亮:
[self.formView.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UILabel class]]) {
UILabel *label = (UILabel *)obj;
if ( label.tag >= TEXTFIELDTYPE_MIN_VAL && label.tag <= TEXTFIELDTYPE_MAX_VAL ) {
labelDict[[NSString stringWithFormat:@"%d",label.tag]] = label;
}
}
}];
答案 0 :(得分:3)
Objective-C枚举继承自C枚举,无法在运行时反映出来。在不滥用调试符号的情况下(对于缓慢且不可靠的结果来说这将是一个过于复杂的任务),我相信不可能提出一个函数来告诉你任意值是否是任意枚举的成员。< / p>
一种可能的解决方法是创建一个包含所有枚举值的NSSet,并检查该集合中是否存在标签的标签。否则,如果您的枚举是连续的,您可以检查标记是否在枚举的最小值和最大值之间。
答案 1 :(得分:1)
尝试这个,而不是所有子视图的循环,运行你的枚举值的循环, 希望枚举值按顺序排列,然后只有下面的代码可以工作:
for(NSInteger tagVal = enum.firstEnum; tagVal <= enum.lastEnum; tagValue++) {
NSObject *obj = [self.formView viewWithTag:tagVal];
if ([obj isKindOfClass:[UILabel class]]) {
UILabel *label = (UILabel *)obj;
// Here is where I want to add the check before I do this line
labelDict[[NSString stringWithFormat:@"%d",label.tag]] = label;
}
}
答案 2 :(得分:0)
试试这个
if ([[dict allKeys] containsObject:lbl]) {
}