Pra*_*dha 28 objective-c uisearchbar ios13 xcode11
在Xcode-11-Beta(ios13)之前,以下代码用于自定义searchbar值以获取使key正常工作的键值。现在低于崩溃日志。
'NSGenericException',原因:'禁止访问UISearchBar的_searchField ivar。这是一个应用程序错误”
- (UITextField *)textField
{
return [self valueForKey:@"_searchField"];
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
Jor*_*n H 51
SDK现在提供了,UISearchBar.searchTextField因此您可以简单地用公共API替换私有API的实现。
searchBar.searchTextField.backgroundColor = [UIColor blueColor];
Run Code Online (Sandbox Code Playgroud)
小智 11
我遇到了同样的崩溃,使用IOS 13,您不再需要.value(forKey :)
这是导致崩溃的行:
if let searchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
Run Code Online (Sandbox Code Playgroud)
解决方法是:
let searchField = searchController.searchBar.searchTextField
Run Code Online (Sandbox Code Playgroud)
做这个:
var searchTextField: UITextField?
if #available(iOS 13.0, *) {
searchTextField = searchBar.searchTextField
} else {
if let searchField = searchBar.value(forKey: "searchField") as? UITextField {
searchTextField = searchField
}
}
Run Code Online (Sandbox Code Playgroud)
这将根据版本检查为您提供适当的搜索栏文本字段。
如果我们希望在使用Xcode 11编译时也支持iOS 12和更早版本,则可以扩展UISearchBar获取文本字段的位置
extension UISearchBar {
var textField : UITextField? {
if #available(iOS 13.0, *) {
return self.searchTextField
} else {
// Fallback on earlier versions
for view : UIView in (self.subviews[0]).subviews {
if let textField = view as? UITextField {
return textField
}
}
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
用法
searchBar.textField?.font = UIFont.systemFont(ofSize: 15.0)
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以访问所有textField的属性,并根据需要修改 UISearchBar
视图层次结构有所变化。因此,通过印刷self.subviews[0]).subviews,其中self在UISearchBar
对于iOS 12及更早版本
对于iOS 13+
随着UISearchBarBackground,现在我们已经UISearchBarSearchContainerView和UISearchBarScopeContainerView而UISearchBarTextField缺少它是由苹果公司提供的一种延长更换UISearchTextField类
extension UISearchBar {
open var searchTextField: UISearchTextField { get }
}
Run Code Online (Sandbox Code Playgroud)
因此,我们可以直接searchBar.searchTextField在iOS 13及更高版本的设备中访问,而如果我们尝试在iOS 12及更低版本的OS设备中访问此属性,则会导致崩溃。
崩溃将是这样的:
[UISearchBar searchTextField]:无法识别的选择器已发送到实例
下面是苹果文档此
小智 5
它对我来说仍然可以使用键“ searchField”而不带下划线。迅捷5
guard let searchField = searchBar.value(forKey: "searchField") as? UITextField else { return }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10720 次 |
| 最近记录: |