2014-02-26 164 views
1

所以我有一個自我創建的頂級欄控制器正在我的其他控制器視圖中實現。我在這個頂部欄上有一個文本框。我想知道如果用戶在鍵盤外單擊任何東西,最好的辦法是讓鍵盤解散。我確實有一個輕擊手勢識別器,執行方法dismisskeyboard。但是,這隻有在用戶點擊鍵盤外的頂部欄時纔有效。有沒有辦法設置它,所以如果用戶點擊屏幕上的任何東西,那麼這將關閉鍵盤?關閉鍵盤

+0

在self.view上添加點按手勢... –

回答

1

我會描述的方法是黑客,但仍然有效。

  1. 創建透明UIButtonview的幀,象下面這樣:

    UIButton* overlay = [UIButton buttonWithType:UIButtonTypeCustom]; 
    overlay.frame = self.view.bounds; 
    overlay.backgroundColor = [UIColor clearColor]; 
    [overlay addTarget:self action:@selector(hideOverlay:) forControlEvents:UIControlEventTouchDown]; 
    [self.view.subviews[0] insertSubview:overlay belowSubview:self.textField]; 
    
  2. 創建方法hideOverlay以關閉該鍵盤並隱藏透明:

    -(void)hideOverlay:(id)sender { 
        UIView* overlay = sender; 
        [overlay removeFromSuperview]; 
        [self.textField resignFirstResponder]; 
    } 
    

您應該理想地稱爲第一塊代碼textFieldDidBeginEditing:UITextFieldDelegate的協議方法,你應該相應地註冊你的通話類。

希望它有幫助。

+0

嘿,感謝您的幫助。我面臨的問題是,我需要現在讓我的頂級控制器的框架成爲整個屏幕。但是當我這樣做時,它使得父母控制器按鈕不起作用,因爲他們現在在頂部欄的視圖後面(儘管它們仍然可見)。有沒有辦法解決這個問題? – user3007080

1

您可能會嘗試給文本字段一個透明的inputAccessoryView,其大小設置爲填充屏幕的其餘部分,以捕獲點擊並消除鍵盤。