有人知道如何从 iOS 7.1 上的任何 UISearchBar 获取 UITextField,我需要更改字体和搜索图标,但旧代码不适用于新版本 7.1,感谢您的帮助。
这是获取 UITextField 的旧代码,仅适用于低于 7.1 的版本
UITextField *txfSearchField = [default_search_bar valueForKeyPath:@"_searchField"];
有人知道如何从 iOS 7.1 上的任何 UISearchBar 获取 UITextField,我需要更改字体和搜索图标,但旧代码不适用于新版本 7.1,感谢您的帮助。
这是获取 UITextField 的旧代码,仅适用于低于 7.1 的版本
UITextField *txfSearchField = [default_search_bar valueForKeyPath:@"_searchField"];
如果您在UISearchBar的子类中,则可以使用简单的修复。
在初始化之后不知何故,子视图中没有 UITextField 的实例。但是在 - (void)layoutSubviews 你可以找到它。
所以解决方案是移动代码,即从 init 中搜索文本字段。您可以使用这个简单的方法,它适用于 7.1 之前的所有 iOS
- (UIView *)firstViewOfClass:(Class)class inSubviewsOfView:(UIView *)view
{
UIView *result = nil;
for (UIView *subview in view.subviews)
{
if ([subview isKindOfClass:class])
{
result = subview;
}
else
{
result = [self firstViewOfClass:class inSubviewsOfView:subview];
}
if (result)
{
break;
}
}
return result;
}
使用示例:
- (void)layoutSubviews
{
if (!self.textField)
{
self.textField = (UITextField *)[self firstViewOfClass:[UITextField class] inSubviewsOfView:self];
}
[super layoutSubviews];
// your code here.
}
您应该尝试像这样搜索它:
for (UIView* subView in self.searchBar.subviews) {
for (UIView* searchView in subView.subviews) {
if ([searchView isKindOfClass:[UITextField class]]) {
self.searchTextField = (UITextField*)searchView;
break;
}
}
}