删除UISearchBar中的清除按钮

时间:2014-08-20 14:38:46

标签: ios swift uisearchbar

我想从UISearchBar中删除清除按钮(灰色x)。我尝试像this answer中描述的那样做,但它不起作用。

我将Objective-C代码从答案和下面的评论翻译成以下Swift代码:

for subview in searchBar.subviews {
        configureSearchBarView(subview as UIView)
}

func configureSearchBarView(view: UIView) {
    for subview in view.subviews {
        self.configureSearchBarView(subview as UIView)
    }
    if subview.conformsToProtocol(UITextInputTraits) {
        var clearView = view as UITextField
        clearView.clearButtonMode = UITextFieldViewMode.Never
    }
}

不幸的是,这并没有删除清除按钮。

Another answer建议使用appearanceWhenContainedIn,但此方法似乎并未在Swift中实现。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

我找到了解决方案。可以将清除按钮与自定义图像交换:

UISearchBar.appearance().setImage(UIImage(named: "emptyImg"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal)
UISearchBar.appearance().setImage(UIImage(named: "emptyImg"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Highlighted)

emptyImg是一个包含一个白色像素的png。找到this answer

答案 1 :(得分:3)

<强>夫特

我找到了一种更好的方法,可以使用 clearButtonMode = .never

完全删除按钮
let searchBarStyle = searchBar.value(forKey: "searchField") as? UITextField
searchBarStyle?.clearButtonMode = .never

在故事板中设置UISearchBar的ID。 enter image description here

答案 2 :(得分:3)

雨燕5

在iOS 13上进行了测试

正如我在another answer中指出的那样,这是使我完全消失的那条衬里:

searchBar.searchTextField.clearButtonMode = .never

但是,如果您只希望在用户键入时显示它,然后在搜索栏失去焦点时使其消失,也可以将其设置为.whileEditing