2016-09-06 12 views
3

検索バーとキャンセルボタンがあります。検索ボタンをタップしても結果は表示されますがキャンセルボタンは無効です。初期の結果。検索結果が表示された後にキャンセルボタンをアクティブにするにはどうすればよいですか?検索ボタンをタップした後、検索バーのキャンセルボタンを有効にします。

はここで私はすでにあなたがsearchBar.endEditing(true)その後、インクルードはボタンが無効になってキャンセルしない場合、そのかどうかを確認するために、その後にこれを追加してみてください私の経験では、私のviewDidLoad

+0

あなたは、メインスレッド –

答えて

3

UISearchBarDelegatesearchBar.delegate = selfを実装私のコード

func searchBarSearchButtonClicked(searchBar: UISearchBar) { 
    searchBar.endEditing(true) 
    searchBar.setShowsCancelButton(true, animated: true) 
    filterContentForSearchText(searchBar.text!, scope: "All") 
    print(searchBar.text) 
} 
func searchBarCancelButtonClicked(searchBar: UISearchBar) { 
    searchBar.text = "" 
    searchBar.resignFirstResponder() 
    searchBar.setShowsCancelButton(false, animated: true) 
    database = dataUtuh 
    self.collectionView.reloadData() 
} 

です仕事、私のプロジェクトでそれを使用する:

func enableCancelButton (searchBar : UISearchBar) { 
    for view1 in searchBar.subviews { 
     for view2 in view1.subviews { 
      if view2.isKindOfClass(UIButton) { 
       let button = view2 as! UIButton 
       button.enabled = true 
       button.userInteractionEnabled = true 
      } 
     } 
    } 
} 
+0

を試みることができるかもしれ私が ''で(真)searchBar.endEditing 'の後に関数を呼び出しますsearchBarSearchButtonClicked'を実行してもまだ動作しません –

+1

'searchBarSearchButtonClicked'の最後の行に入れて、何度も 'setShowsCancelButton'を呼び出した理由を再確認してください。 – Tj3n

+0

ありがとう!それは完璧に働く、私はあなたの助けなしにすることができなくなります –

5

コードをena検索バーのキャンセルボタンをsearchBarSearchButtonClickedデリゲートメソッド このようにして検索バーをクリックすると、キャンセルボタンが有効になります。

ので、完全なコードスニペットは

func searchBarSearchButtonClicked(searchBar: UISearchBar) { 
    searchBar.endEditing(true) 
    searchBar.setShowsCancelButton(true, animated: true) 
    print(searchBar.text) 


    for view in searchBar.subviews { 
     for subview in view.subviews { 
      if let button = subview as? UIButton { 
       button.enabled = true 
      } 
     } 
    } 

} 

ハッピーコーディングだろう...

関連する問題