2015-08-26 2 views
4

Я пытаюсь установить цвет текста кнопки «Отмена» рядом со строкой поиска в Swift. Это код, который у меня есть:Установить цвет текста кнопки отмены для строки поиска (Swift)

func searchDisplayControllerWillBeginSearch(controller: UISearchDisplayController) { 
    self.searchDisplayController?.searchBar.showsCancelButton = true 
    var cancelButton: UIButton 
    var topView: UIView = self.searchDisplayController?.searchBar.subviews[0] as! UIView 
    for subView in topView.subviews { 
     if subView.isKindOfClass(NSClassFromString("UINavigationButton")) { 
      cancelButton = subView as! UIButton 
      cancelButton.setTitleColor(UIColorFromRGB(0x0096FF), forState: UIControlState.Selected) 
      cancelButton.setTitleColor(UIColorFromRGB(0x0096FF), forState: UIControlState.Normal) 
     } 
    } 
} 

Он работает для выделенного состояния, но не работает для нормального состояния. Я знаю, что в Objective-C я мог использовать appearanceWhenContainedIn, но этого не существует в Swift.

Любые идеи?

+1

Вы пробовали это: http://stackoverflow.com/a/27807417/765298? – Losiowaty

+0

«Я знаю, что в Objective-C я мог использовать внешний видWonContainedIn, но этого не существует в Swift». Фактически, в Swift 2.0 он существует. – matt

+1

Я не использую 2.0 прямо сейчас, но я использовал технику @ Losiowaty, и она отлично работает! Благодарю. – user3746428

ответ

12
func searchBarTextDidBeginEditing(searchBar: UISearchBar) { 

    searchBar.setShowsCancelButton(true, animated: true) 
    for ob: UIView in ((searchBar.subviews[0])).subviews { 

     if let z = ob as? UIButton { 
      let btn: UIButton = z 
      btn.setTitleColor(UIColor.blackColor(), forState: .Normal) 
     } 
    } 
} 

это метод делегата UISearchBarDelegate :)

Смежные вопросы