我在自定义UITextFields
中有一堆UITableViewCell
具有相同的标记号。我试图制作一个for
循环来迭代所有带有特定标记号的textFields
。
这是我的代码:
for (UItextField *textField in [cell.contentView viewWithTag:8] {
... // Perform some code
}
当我这样做时,我会收到警告:[cell.contentView view...]
说:
Collection expression type 'UIView *' may not respond to 'countByEnumeratingWithState:objects.count'
我可以写什么而不是[cell.contentView.view view...]
?
答案 0 :(得分:3)
执行viewWithTag:
时,它将返回单个UIView
对象,但对于具有相同标记号的视图效果不佳。因此,它会返回标记为UIVeiw
的第一个8
,因此我们要做的是循环遍历该视图中的所有子视图。然后检查它是否为UITextField
且标记等于8
。 if statement
的原因是,即使我们将对象类型从UITextField
更改为{{1},也无法保证循环中的对象返回将是id
。我们仍然无法保证它实际上是UITextField
所以我们需要UITextField
。
if statement
答案 1 :(得分:2)
此代码:[cell.contentView viewWithTag:8]
返回单个视图,而不是文档中指定的数组:viewWithTag:
如果您希望获得具有相同标记的所有视图,则使用KVC:
NSArray *filteredViews = [containerView.subviews filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.tag == %d", 8]]
for (UIView *view in filteredViews) {
if ([view isKindOfClass:[UITextField class]) {
//do something with the view
}
}
答案 2 :(得分:1)
for (UITextField *textfield in viewThatContainTheTextfields.subviews) {
if (textfield.tag == 8) {
}
}