2

有人知道如何从 iOS 7.1 上的任何 UISearchBar 获取 UITextField,我需要更改字体和搜索图标,但旧代码不适用于新版本 7.1,感谢您的帮助。

这是获取 UITextField 的旧代码,仅适用于低于 7.1 的版本

UITextField *txfSearchField = [default_search_bar valueForKeyPath:@"_searchField"];

4

2 回答 2

2

如果您在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.
}
于 2014-03-14T11:07:22.833 回答
0

您应该尝试像这样搜索它:

    for (UIView* subView in self.searchBar.subviews) {
        for (UIView* searchView in subView.subviews) {
            if ([searchView isKindOfClass:[UITextField class]]) {
                self.searchTextField = (UITextField*)searchView;
                break;
            }
        }
    }
于 2014-03-13T03:54:20.490 回答