将带有图像的按钮添加到 UISearchBar
Add button with image to UISearchBar
我使用自定义 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
}
}
如何在 UISearchBar 中添加这个带有红色图像的按钮?
一个UISearchBar
只是UIView
的一个子类。我想您可以像添加任何其他视图一样添加 UIButton
。
但是,您要添加按钮的位置已经有一个按钮。 UISearchBar
附带一个书签按钮,您可以在该按钮上设置自定义图像(通过调用 setImage(someImage, for: .bookmark, state: .normal)
)。此按钮有一个 UISearchBarDelegate
方法,您可以从中响应 touch-up-inside 事件。
func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar)
{
print("The button on the right side of my search bar was pressed")
}
我发现这种方法比尝试猜测自定义按钮的合适大小和位置更清晰,"bookmark" 用词不当。
我还建议不要覆盖 draw(_ rect:)
进行初始化和 属性 设置。覆盖它会产生性能成本,并且只需要自定义绘图代码。
需要在函数内添加这段代码 draw(_ rect: CGRect):
let img = UIImage(named: "openFullList")
let imageButton = UIButton(type: .custom)
imageButton.frame = CGRect(x: self.frame.width - (img?.size.width)!, y: (self.frame.height - (img?.size.height)!)/2.0, width: (img?.size.width)!, height: (img?.size.height)!)
imageButton.setImage(img, for:UIControlState.normal)
self.addSubview(imageButton)
我使用自定义 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
}
}
如何在 UISearchBar 中添加这个带有红色图像的按钮?
一个UISearchBar
只是UIView
的一个子类。我想您可以像添加任何其他视图一样添加 UIButton
。
但是,您要添加按钮的位置已经有一个按钮。 UISearchBar
附带一个书签按钮,您可以在该按钮上设置自定义图像(通过调用 setImage(someImage, for: .bookmark, state: .normal)
)。此按钮有一个 UISearchBarDelegate
方法,您可以从中响应 touch-up-inside 事件。
func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar)
{
print("The button on the right side of my search bar was pressed")
}
我发现这种方法比尝试猜测自定义按钮的合适大小和位置更清晰,"bookmark" 用词不当。
我还建议不要覆盖 draw(_ rect:)
进行初始化和 属性 设置。覆盖它会产生性能成本,并且只需要自定义绘图代码。
需要在函数内添加这段代码 draw(_ rect: CGRect):
let img = UIImage(named: "openFullList")
let imageButton = UIButton(type: .custom)
imageButton.frame = CGRect(x: self.frame.width - (img?.size.width)!, y: (self.frame.height - (img?.size.height)!)/2.0, width: (img?.size.width)!, height: (img?.size.height)!)
imageButton.setImage(img, for:UIControlState.normal)
self.addSubview(imageButton)