2015-04-28 20 views
24

我試圖讓我的搜索欄快速,但我有一個問題,當我關閉搜索欄時,屏幕上的鍵盤。當我嘗試使用textfield時,它可以很好地處理這段代碼。當我在Swift上按下搜索欄時如何使鍵盤消失?

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     self.view.endEditing(true) 
    } 

它工作時,我按了我的文本字段,然後鍵盤不見了。我想用我的搜索欄來製作,因爲當我使用搜索欄並使用像textfield一樣的方式時,它根本不起作用。任何參考或代碼對我來說都非常有用。

+0

您可以在下面的鏈接的答案: http://stackoverflow.com/questions/24908966/hide-keyboard-for-text-field-in-swift-programming-language –

+0

我曾嘗試如此我得到我的代碼textfield和它的作品完全正常,就像我說的,但我有一些問題,當我必須使用搜索欄,因爲我不能讓我的鍵盤解僱,當我觸摸我的搜索欄外的另一個區域 – aji

回答

36

試試這個:

self.mySearchController.searchBar.endEditing(true) 

與您所創建的控制器名稱替換mySearchController .. 如果沒有編程方式創建它,而是剛纔拖動從庫中的搜索欄,然後你IBOutlet中搜索到您的類和參考它爲:

self.mySearchBar.endEditing(true) 
+0

你能給我任何線索如何讓我的搜索欄外點擊事件,因爲當我使用textfield時,我使用像我之前寫的功能,它會自動工作,當我點擊我的文本框外點擊事件。你能幫我在搜索欄中有這樣的功能嗎 – aji

+0

你是從圖書館拖到故事板上還是從課堂內部創建它? –

+0

我把它從我的故事板中拖出 – aji

4
func searchBarSearchButtonClicked(searchBar: UISearchBar) { 

     searchActive = false; 
     searchProject.resignFirstResponder() 
    } 

這個方法被調用當keyboard.So用戶點擊搜索按鈕,在這裏我們可以辭退ķ我認爲這是正確的方法。

10

經過測試和工作!

func searchBarSearchButtonClicked(searchBar: UISearchBar) 
{ 
    searchActive = false; 
    self.mySearchBar.endEditing(true) 
} 
0

,我們可以用下面的方法

func searchBarTextDidBeginEditing(searchBar: UISearchBar) { 
     searchBar.showsCancelButton = true; 
    } 

    func searchBarTextDidEndEditing(searchBar: UISearchBar) { 
     searchBar.showsCancelButton = false; 
    } 
1

首先做到這一點,蘋果的UISearchBarDelegate是隱藏鍵盤,當用戶點擊搜索按鈕,同時UISearchBar的實例是first responder正確的解決方案(學習UIResponder)。總之,searchBarSearchButtonClicked(_:)是你需要完成這項任務。

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 
    searchBar.resignFirstResponder() // hides the keyboard. 
    doThingsForSearching() 
} 

如果它不工作,檢查,並控制器符合UISearchBarDelegate其次,不UISearchBarDelegate瞭解你的類實現(如果你不很明白我在說什麼,你應該學會delegation pattern開始讀取here):

class YourAwesomeViewController: UIViewController, UISearchBarDelegate { // pay attention here 

    @IBOutlet weak var yourSearchBar: UISearchBar! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.yourSearchBar.delegate = self // and it's important too 
    } 
} 

另外,如果你需要隱藏的search bar鍵盤觸摸外面而不觸及搜索按鈕(用戶可以暢e他的頭腦去搜索),UITapGestureRecognizer也是一個簡單的方法來處理這個問題。

  1. Ctrl-dragObject Library一個Tap Gesture Recognizer你的視圖控制器。

enter image description here

  • Ctrl-drag在故事板最近添加Tap Gesture Recognizerdocument outline到你的類的實現作爲IBAction
  • enter image description here

  • 最後,寫一個代碼:
  • @IBAction func tapToHideKeyboard(_ sender: UITapGestureRecognizer) { self.yourSearchBar.resignFirstResponder() }

    另外,不要忘記用於創建@IBOutlet搜索欄在你的類實現中有一個訪問權限。

    上述兩種變體都適用於我的項目。

    0
    class MaCaveViewController: UIViewController, UISearchBarDelegate { 
    
        @IBOutlet weak var SearchBar: UISearchBar! 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         SearchBar.delegate = self 
        } 
    
        // When button "Search" pressed 
        func searchBarSearchButtonClicked(_ searchBar: UISearchBar){ 
         print("end searching --> Close Keyboard") 
         self.SearchBar.endEditing(true) 
        } 
    } 
    

    這對我很好。

    相關問題