删除UISearchBar中的清除按钮

Apf*_*aft 3 uisearchbar ios swift

我想从UISearchBar中删除清除按钮(灰色x)。我试图按照此答案中的说明进行操作,但是它不起作用。

我将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
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不会删除清除按钮。

另一个答案建议与使用appearanceWhenContainedIn,但是此方法似乎未在Swift中实现。

有任何想法吗?

Lui*_*ñez 6

雨燕5

在 iOS 13 上测试

正如我在另一个答案中指出的那样,这是为我工作的一个班轮,可以让它完全消失:

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

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


Apf*_*aft 5

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

UISearchBar.appearance().setImage(UIImage(named: "emptyImg"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal)
UISearchBar.appearance().setImage(UIImage(named: "emptyImg"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Highlighted)
Run Code Online (Sandbox Code Playgroud)

emptyImg是一个包含一个白色像素的 png。在这个答案中找到


Cri*_*sei 5

迅速

我发现了一种更好的方法,可以使用clearButtonMode = .never完全删除按钮

let searchBarStyle = searchBar.value(forKey: "searchField") as? UITextField
searchBarStyle?.clearButtonMode = .never
Run Code Online (Sandbox Code Playgroud)

在情节提要中设置UISearchBar的ID。 在此处输入图片说明

  • 是的,`searchField`基本上是一个隐藏属性`var searchField:UITextField`,我们正在通过键值编码进行访问。由于它是隐藏的(未记录)属性,因此它可以在下一个iOS次要版本上停止工作。 (2认同)