2012-07-11 51 views
0

我有並排2文本框的側面,countryCodeTextField和cellphoneTextField隱藏IOS鍵盤與多個文本框

在countryCodeTextField。我有一個動作selectCountry上Edit Did Begin發生在countryCodeTextField


- (IBAction)selectCountry:(id)sender { 
    countryCodeTextField.delegate = self; 
    [countryCodeTextField resignFirstResponder]; 

  • 注意自我實現<UITextFieldDelegate>

問題是當用戶點擊手機鍵盤顯示,如果他點擊countryCodeTextField鍵盤永遠不會被解僱。

如果用戶首先點擊countryCode,那麼鍵盤永遠不會出現(這是我想要的)。

爲什麼當用戶先點擊cellphoneTextField然後再點擊countryCodeTextField時,鍵盤是不會隱藏的?

+0

你的代碼應用到您的cellphoneTextField? – KPath001 2012-07-11 22:46:49

+1

我對這個問題有點困惑:期望的行爲是什麼?爲什麼您想在用戶點擊國家/地區代碼文本字段時立即關閉鍵盤? – 2012-07-11 22:47:13

+0

這是一個好點,你不想讓鍵盤顯示? – KPath001 2012-07-11 22:48:20

回答

1

如果您不希望用戶能夠編輯特定的UITextField,請將其設置爲不啓用。

UITextField *textField = ... // Allocated somehow 
textfield.enabled = NO 

或者只是檢查Interface Builder中的啓用複選框。然後,文本框將仍然存在,您可以通過配置文本來更新它。但正如評論中提到的那樣,用戶期望UITextFields是可編輯的。

另外,你爲什麼要在IBAction回調中設置委託?我認爲你最好在Interface Builder中做這個或者在代碼中創建UITextField。

編輯:

好了 - 所以你希望用戶能夠選擇框,但隨後彈出一個自定義子視圖(S)從他們選擇的東西,這將填補框。

所以設置的UITextField委託當您創建它(如上所述),並實現從UITextFieldDelegate協議如下:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    return NO; 
} 

返回NO。請注意,如果您爲兩個UITextFields使用相同的委託,則需要爲其他字段返回YES。例如,像:顯示

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    if (textField == countryTextField) 
     return NO; 
    return YES; 
} 

這應該可以停止鍵盤 - 現在你必須找出如何激發自己的子視圖,這我會建議通過IBAction爲做(潤色什麼也許)。你必須在這裏測試各種各樣的東西,但記住你有點破壞UITextField的重要性,也許它會工作,也許它不會,也許它會在下一次iOS升級中破裂。

+0

這不起作用,這實際上會使textField不響應任何事件。我仍然希望它可以編輯,而不是通過鍵盤。 – daniel 2012-07-11 23:34:08

+1

呵呵,你現在已經危險地改變了UI工具的標準行爲,你只是想和用戶混淆。 – ChrisH 2012-07-11 23:37:52

+0

嘗試了你的新想法。好主意,但不幸的是它沒有奏效。鍵盤仍然選擇了手機的字段,並沒有隱藏它。 – daniel 2012-07-12 00:05:37

0

好吧,首先,我認爲你不應該使用UITextField。我認爲你應該使用UIButton並將當前值顯示爲按鈕的標題。然而,如果你有心安置它,我會使用我們的好朋友inputViewUITextField上的一個屬性,並將其設置爲你的自定義輸入視圖(我假設它是一個UIPickerView或類似的。)

這有額外的好處,不會讓盲人和視覺受損的用戶可怕地破壞您的應用程序,您在應用標準行爲之前應該瞭解這些內容。

0

在你的方法:

- (IBAction)textFieldDidBeginEditing: (UITextField *)textField 

調用此: [文本字段becomeFirstResponder]

並申請檢查這兩個領域,即,當文本框是countryCodeTextField寫:

[textField resignFirstResponder]; 

,並調用你的方法:

[self selectCountry]; 

在這種方法中顯示的國家代碼列表。

因此您的代碼將是:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    return YES; 
} 
- (IBAction)textFieldDidBeginEditing: (UITextField *)textField{ 

    [textField becomeFirstResponder]; 

    if (textField == countryCodeTextField){ 

    [textField resignFirstResponder]; 
    [self selectCountry]; 
    } 
} 

-(IBAction)selectCountry{ 
    //display the list no need to do anything with the textfield.Only set text of TextField as the selected countrycode. 
}