将带图像的按钮添加到UISearchBar

Kir*_*ill 0 uibutton uisearchbar ios swift

我使用自定义UISearchBar并覆盖函数"draw":

class MySearchBar: UISearchBar {
    override func draw(_ rect: CGRect) {
        if let index = indexOfSearchFieldInSubviews() {
            self.showsCancelButton = false
            searchField.clearButtonMode = .never
        }
    }

    func indexOfSearchFieldInSubviews() -> Int! {        
        var index: Int!
        let searchBarView = subviews[0]        
        for i in 0 ..< searchBarView.subviews.count {
            if searchBarView.subviews[i].isKind(of: UITextField.self) {
                index = i
                break
            }
        }

        return index
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在UISearchBar中添加带红色图像的按钮?

自定义UISearchBar

bey*_*ulf 6

A UISearchBar只是一个子类UIView.我想你可以添加UIButton任何其他视图.

但是,您要添加按钮的位置已有一个按钮.UISearchBar附带一个书签按钮,您可以设置自定义图像(通过调用setImage(someImage, for: .bookmark, state: .normal)).此按钮有一个UISearchBarDelegate方法,您可以通过该方法响应内部触摸事件.

func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar)
{
    print("The button on the right side of my search bar was pressed")
}
Run Code Online (Sandbox Code Playgroud)

我发现这种方法比试图猜测自定义按钮的适当大小和位置更清晰,"书签"用词不当.

我还建议不要覆盖draw(_ rect:)初始化和属性设置.覆盖它有一个性能成本,只需要定制绘图代码.