隐藏UISearchBar明文按钮

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)

希望这个帮助!=)


Ale*_*der 9

有一种更好的方法,您不必使用私有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)

  • 从技术上讲,这使按钮不可见,但您仍然可以点击它。但是+1为使用官方API。 (3认同)

kis*_*747 7

根据@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)


Cha*_*tas 5

斯威夫特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)


thi*_*ine 5

您可以删除所有 UISearchBar 实例的明文按钮:

[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]].clearButtonMode = UITextFieldViewModeNever;
Run Code Online (Sandbox Code Playgroud)


Lui*_*ñez 5

斯威夫特 5

在 iOS 13 上测试

一种为我工作的班轮:

searchBar.searchTextField.clearButtonMode = .never
Run Code Online (Sandbox Code Playgroud)

您还可以将其设置为.whileEditing在用户键入时显示它,然后在搜索栏失去焦点时将其删除。