2017-02-02 12 views
0

Я использую пользовательские UISearchBar и я переопределить функцию «рисовать»:Добавить кнопку с изображением на UISearchBar

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?

custom UISearchBar

+0

Что пользовательский код рисования делать? Вы можете установить изображение для кнопки там, вызвав 'setImage (someImage, для: .bookmark, state: .normal)' – beyowulf

+0

Да, но как я могу добавить кнопку внутри MySearchBar? – Kirill

ответ

0

Нужно добавить этот код в функции дро (_ прямоугольника: 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) 
3

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") 
} 

Я считаю этот подход яснее, чем пытаться угадать наиболее подходящий размер и расположение для пользовательской кнопки, «закладка» неправильно не выдержать.

Я бы также рекомендовал не переопределять draw(_ rect:) для инициализации и настройки свойств. Для его переопределения требуется производительность, и там должен быть только пользовательский код чертежа.

+0

Отличный ответ, но как изменить доступ к закладке Icon? –

+1

, чтобы добавить доступность, просто выполните: img? .accessibilityLabel = "..." –