Bhu*_*hta 0 objective-c uitextfield uisearchbar ios
我正在访问搜索栏的文本字段.这不断变化
对于我正在使用的iOS 6
textField = [searchbar.subviews objectAtIndex:1];
Run Code Online (Sandbox Code Playgroud)
它在iOS 7中有一个视图,并且有一个子视图,我们可以从中获取textField,所以我使用以下代码用于iOS 7或更高版本的iOS
UIView *searchbarview = [searchbar.subviews objectAtIndex:0];
NSLog(@"searchbarview.subviews Array is %@",searchbarview.subviews.description);
textField = (UITextField *)[searchbarview.subviews objectAtIndex:1];
Run Code Online (Sandbox Code Playgroud)
现在自iOS 7.1以来,searchbarview只有一个子视图是UISearchBarBackground,与iOS 7.0不同,它有两个子视图,所以即使我使用for循环遍历所有子视图,我也无法获得textField
任何人都可以帮我这个谢谢,
编辑 这是searchbarview.subviews返回的数组的日志,你可以看到它只返回一个UISearchBarBackground对象,所以我想知道UITextField对象在哪里
searchbarview.subviews Array is (
"<UISearchBarBackground: 0xe6bc9d0; frame = (0 0; 768 50); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xe6bcb20>>"
)
Run Code Online (Sandbox Code Playgroud)
我在iOS 7.1的模拟器上测试过.我看到UISearchBar的结构如下:
===============================================
的UISearchBar
++ UIView
++++ UISearchBarBackground
++++ UISearchBarTextField(这是UITextField对象)
++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++
===============================================

所以在iOS 7.1上,您可以像这样获得UITextField:
UIView *subviews = [searchbar.subviews lastObject];
UITextField *textView = (id)[subviews.subviews objectAtIndex:1];
Run Code Online (Sandbox Code Playgroud)
===============================================
UPDATE
如果您UISearchBar在a中UIViewController,请尝试使用方法viewDidLoad或代码viewWillAppear!
UITextField一旦你创建就不要寻找UISearchBar(寻找UISearchBar已经出现在屏幕上)
我创建了一个可以在任何版本的 iOS 中工作的递归方法
- (UITextField *) findTextFieldFromControl:(UIView *) view
{
for (UIView *subview in view.subviews)
{
if ([subview isKindOfClass:[UITextField class]])
{
return (UITextField *)subview;
}
else if ([subview.subviews count] > 0)
{
UIView *view = [self findTextFieldFromControl:subview];
if (view) {
return (UITextField *)view;
}
}
}
return nil;
}
Run Code Online (Sandbox Code Playgroud)
你可以调用这个方法
UITextField *searchBarTextField = [self findTextFieldFromControl:self.placeSearchBar];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5766 次 |
| 最近记录: |