首页 > 解决方案 > iOS 13 自定义 UISearchBar _searchField 崩溃

问题描述

使用新的 iOS 13,我尝试使用更改 UISearchBar textField 属性时崩溃了valueForKey:@"_searchField"

现在看来,苹果改变了一些东西。

我已经使用以下自定义方法创建了 UIView 的子类,现在它似乎可以工作了!

- (UIView *)findSubview:(NSString *)name resursion:(BOOL)resursion
{
    Class class = NSClassFromString(name);
    for (UIView *subview in self.subviews) {
        if ([subview isKindOfClass:class]) {
            return subview;
        }
    }

    if (resursion) {
        for (UIView *subview in self.subviews) {
            UIView *tempView = [subview findSubview:name resursion:resursion];
            if (tempView) {
                return tempView;
            }
        }
    }

    return nil;
} 

您可以通过这种方式简单地调用此方法来更改 UITextField 属性:

UITextField *textField = (UITextField*)[self findSubview:@"UITextField" resursion:YES];

显然这是一个 Objective-c 片段,如果有人知道如何在 swift 中编写相同的代码,可以将其添加到答案中。

快乐编码!

标签: iosobjective-cuitextfielduisearchbarios13

解决方案


我不确定它是否会有所帮助,但 UISearchBar 有一个新searchTextField属性允许您访问它的 UISearchTextField,进而访问它的 UITextField:

let searchBar = UISearchBar()
var searchField : UITextField
if #available(iOS 13.0, *) {
    searchField = searchBar.searchTextField
} else {
    searchField = //Your original method
}

推荐阅读