Hur*_*rkS 14 objective-c uitextfield uisearchbar ios
我想知道如何隐藏或不显示UISearchBar出现在交叉textFieldFO的UISearchBar
我试过用这个
filterSearchBar.showsCancelButton = NO;
Run Code Online (Sandbox Code Playgroud)
然而,这是一个实际取消按钮而不是小灰色十字架,所以我想知道是否有一个等效的小灰色按钮显示在UISearchBar.
任何帮助,将不胜感激.
Sot*_*ost 34
您需要获取搜索栏的textField:
UITextField *textField = [searchBar valueForKey:@"_searchField"];
textField.clearButtonMode = UITextFieldViewModeNever;
Run Code Online (Sandbox Code Playgroud)
希望这个帮助!=)
有一种更好的方法,您不必使用私有API或遍历子视图来执行此操作,因此此解决方案是App Store的安全.
UISearchBar有一个内置的API来执行此操作:
[UISearchBar setImage:forSearchBarIcon:state]
您想要的SearchBar图标键是UISearchBarIconClear,您需要UIControlStateNormal状态.然后给它一个清晰的图像图像,你就完成了.
所以,它应该是这样的:
[searchBar setImage:clearImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
根据@Gines的回答,这是Swift版本:
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
guard let firstSubview = searchBar.subviews.first else { return }
firstSubview.subviews.forEach {
($0 as? UITextField)?.clearButtonMode = .never
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Swift 3,基于 @Alexsander 的回答:
searchBar.setImage(UIImage(), for: .clear, state: .normal)
Run Code Online (Sandbox Code Playgroud)
斯威夫特4
添加到亚历山大的答案并在清除按钮上阻止用户交互:
隐藏按钮:
searchBar.setImage(UIImage(), for: .clear, state: .normal)
Run Code Online (Sandbox Code Playgroud)
要禁用清除按钮上的用户交互,只需子类UISearchBar
class CustomSearchBar: UISearchBar {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
let view = super.hitTest(point, with: event)
if view is UIButton {
return view?.superview // this will pass-through all touches that would've been sent to the button
}
return view
}
}
Run Code Online (Sandbox Code Playgroud)
您可以删除所有 UISearchBar 实例的明文按钮:
[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]].clearButtonMode = UITextFieldViewModeNever;
Run Code Online (Sandbox Code Playgroud)
在 iOS 13 上测试
一种为我工作的班轮:
searchBar.searchTextField.clearButtonMode = .never
Run Code Online (Sandbox Code Playgroud)
您还可以将其设置为.whileEditing在用户键入时显示它,然后在搜索栏失去焦点时将其删除。