如何通过iOS上的UITextFields进行枚举
通过子视图枚举以查找文本字段的正确方法是什么如何通过iOS上的UITextFields进行枚举,ios,uiview,uitextfield,fast-enumeration,Ios,Uiview,Uitextfield,Fast Enumeration,通过子视图枚举以查找文本字段的正确方法是什么 NSMutableArray *mutableTFs = [[NSMutableArray alloc] init]; for (UIView *view in [self.view subviews]) { if ([view isKindOfClass:[UITextField class]]) { [mutableTFs addObject:view]; } } 或 我知道这不是正确的
NSMutableArray *mutableTFs = [[NSMutableArray alloc] init];
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
[mutableTFs addObject:view];
}
}
或
我知道这不是正确的措辞,但我不明白的是,如果它是顶级方法,如何将它从视图“转换”为文本字段?这里是最好的方法
// Make sure you're releasing this!
NSMutableArray *textFields = [[NSMutableArray alloc] init];
for (UITextField *textField in [self.view subviews]) {
if ([textField isKindOfClass:[UITextField class]]) {
[textFields addObject:textField];
}
}
通过将UITextField*
指定为执行快速枚举的类型,您将使用已经(通过快速枚举)从id转换为UITextField*
的值这并不保证它们实际上是UITextField,因此您仍然需要进行运行时检查,在本例中,是类:
,以确保您当前使用的对象确实是一个UITextField
因此,这两种方法都是正确的,但只有在结合使用时才正确。第一种方法是这两种方法中唯一的工作方法 第二种方法是将所有子视图添加到数组中。也就是说,如果要将
子视图
更改为子视图
您可以执行以下操作:
for (UITextField *textField in [self.view subviews]) {
if ([textField isKindOfClass:[UITextField class]]) {
[mutableTFs addObject:textField];
}
}
这样,您就不必将视图转换为文本字段来执行特定于文本字段的操作,而只需将其添加到数组中
编辑:如果您不想立即转换为文本字段,可能是因为您同时查找文本字段和文本视图。以下是您以后转换它的方式:
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
UITextField *textField = (UITextField *)view;
// Do whatever you want with the text field.
}
if ([view isKindOfClass:[UITextView class]]) {
UITextView *textView = (UITextView *)view;
// Do whatever you want with the text view.
}
}
通过子视图枚举以查找文本的正确方法是什么
田地
第一种方法是正确的。第二种方法将迭代所有子视图,而不仅仅是类型为UITextField
的子视图。for()
中的类型只是对编译器的提示
有关详细信息,请参阅
如何将其从视图“转换”为文本字段 这就是打字的目的
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
// you don't need to cast just to add to the array
[mutableTFs addObject:view];
// typecasting works as it does in C
UITextField *textField = (UITextField *)view;
// do something with textField
}
}
如果有人感兴趣,请回答前面的问题。“如何将其从视图“转换”为文本字段?”-UITextField继承自UIView,因此每个UITextField都是UIView。您没有将其转换为UIView,而是键入casted,告诉编译器UIView上的任何方法都可以处理此对象。如果在迭代对象时使用UITextField方法,使用下面描述的正确函数,则需要第二种方法,不要使用帖子中的方法:PThanks-需要查看类型转换,直到现在才听说过@亚历克斯·科普兰:不客气:)你可以开始找了。
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
// you don't need to cast just to add to the array
[mutableTFs addObject:view];
// typecasting works as it does in C
UITextField *textField = (UITextField *)view;
// do something with textField
}
}