我想知道如何隐藏或不显示UISearchBar
textField
中出现的UISearchBar
十字架
我尝试过使用此
filterSearchBar.showsCancelButton = NO;
然而,这是一个实际的取消按钮而不是小的灰色十字架,所以我想知道UISearchBar
中显示的小灰色按钮是否等效。
答案 0 :(得分:33)
您需要获取搜索栏的textField:
UITextField *textField = [searchBar valueForKey:@"_searchField"];
textField.clearButtonMode = UITextFieldViewModeNever;
希望这有帮助! =)
答案 1 :(得分:8)
有一种更好的方法可以做到这一点,而且您不必使用私有API或遍历子视图来执行此操作,因此此解决方案是App Store安全的。
UISearchBar有一个用于执行此操作的内置API:
[UISearchBar setImage:forSearchBarIcon:state]
你想要的SearchBar图标键是UISearchBarIconClear,你想要UIControlStateNormal状态。然后给它一个清晰的图像图像,你就完成了。
所以,它应该是这样的:
[searchBar setImage:clearImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];
答案 2 :(得分:7)
根据@Gines的回答,这是Swift版本:
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
guard let firstSubview = searchBar.subviews.first else { return }
firstSubview.subviews.forEach {
($0 as? UITextField)?.clearButtonMode = .never
}
}
答案 3 :(得分:5)
Swift 4
添加亚历山大的答案并阻止用户在清除按钮上进行互动:
隐藏按钮:
searchBar.setImage(UIImage(), for: .clear, state: .normal)
要在清除按钮上禁用用户互动,只需将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
}
}
答案 4 :(得分:4)
您可以删除所有UISearchBar实例的明文按钮:
[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]].clearButtonMode = UITextFieldViewModeNever;
答案 5 :(得分:3)
在iOS 13上进行了测试
为我工作的班轮:
searchBar.searchTextField.clearButtonMode = .never
您还可以将其设置为.whileEditing
,以便在用户键入时显示它,然后在搜索栏失去焦点时将其删除。
答案 6 :(得分:2)
Swift 3,基于@Alexsander回答:
import Foundation
import StoreKit
class Purchase: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {
......
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
print("in product request")
var products = response.products
if (products.count > 0) {
for i in 0 ..< products.count
{
if products[i].productIdentifier == buyingProduct{
buyProduct(products[i])
break
}
}
} else {
print("No products found")
}
}
}
答案 7 :(得分:2)
快捷键5
只需在下面添加一行
searchBar.searchTextField.clearButtonMode = .never
答案 8 :(得分:1)
我尝试了关于这个问题的不同解决方案,即使是在这篇文章中选择的那个,但是它们没有用。
这是我找到解决此问题的方法:
UIView *subview = [[searchBar subviews] firstObject]; //SearchBar only have one subview (UIView)
//There are three sub subviews (UISearchBarBackground, UINavigationButton, UISearchBarTextField)
for (UIView *subsubview in subview.subviews)
{
//The UISearchBarTextField class is a UITextField. We can't use UISearchBarTextField directly here.
if ([subsubview isKindOfClass: [UITextField class]])
{
[(UITextField *)subsubview setClearButtonMode:UITextFieldViewModeNever];
}
}
答案 9 :(得分:1)
试试这个:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
UITextField *textField = [searchBar valueForKey:@"_searchField"];
textField.clearButtonMode = UITextFieldViewModeNever;
}
答案 10 :(得分:1)
Swift 3解决方案:
extension UISearchBar{
var textField : UITextField{
return self.value(forKey: "_searchField") as! UITextField
}
}
用法:
searchBar.textField.clearButtonMode = .never
答案 11 :(得分:0)
在Swift 2.3的情况下,只需使用:
var searchBar = UISearchBar();
searchBar.frame = CGRectMake(0, 0, 00, 20))
for subview: UIView in (searchBar.subviews.first?.subviews)!
{
if (subview.isKindOfClass(UITextField) )
{
let textFieldObject = (subview as! UITextField)
textFieldObject.clearButtonMode = .Never;
}
}
答案 12 :(得分:0)
Swift 2.3,基于@Alexsander回答:
searchBar.setImage(UIImage(named: "SearchClearIcon"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Highlighted)
searchBar.setImage(UIImage(named: "SearchClearIcon"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal)
答案 13 :(得分:0)
将Soto_iGhost的answer转换为Swift 4:
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
let textField: UITextField = searchBar.value(forKey: "_searchField") as! UITextField
textField.clearButtonMode = .never
}
如果出口UISearchBar
,则可以在类中的任何位置编写以上代码。
答案 14 :(得分:0)
thijsonline的answer:
(UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])).clearButtonMode = .never