Я думаю, причина, по которой это не работает, вероятно, searchController.searchBar.searchTextField = nil
, который вы получили.
searchTextField
- это новое свойство для iOS 13
, которое может быть выполнено, если вы поддерживаете только >= iOS 13
. Если вы хотите адаптироваться к предыдущей версии iOS 13
, вы можете пройти UISearchBar
, чтобы найти UISearchBarTextField
и напрямую установить найденный UISearchBarTextField
.
Код, который я посмотрел, вероятно, выглядит следующим образом:Я поместил его в Category
из UIView
.
- (UIView *)findChildViewClass:(Class)childViewClass fromView:(UIView *)fromView{
for (UIView *subView in fromView.subviews) {
if ([subView isMemberOfClass:childViewClass]) {
return subView;
}
UIView *finalView = [self findChildViewClass:childViewClass fromView:subView];
if (finalView) {
return finalView;
}else{
continue;
}
}
return nil;
}
При использовании вы можете настроить свойство searchTextField
для наследования от UITextField
, чтобы сохранить найденное значение.
_searchTextField = (UITextField *)[searchBar findChildViewClass:NSClassFromString(@"UISearchBarTextField") fromView: searchBar];
Это то, чем я сейчас пользуюсь, оно работает, надеюсь, будет полезно для вас.