2011-05-11 34 views
9

我們可以設置的UITextField的這個屬性爲「發送」,「搜索」,「加油」等:我可以動態更改UITextField的屬性UIReturnKeyType嗎?

@property(nonatomic) UIReturnKeyType returnKeyType 

但是在使用的UITextField設置它並沒有改變。

我想要這樣的行爲: 當UITextField爲空時,讓returnKeyType爲「Return」,否則讓returnKeyType爲「Send」。

回答

17

通常,在顯示鍵盤時會檢查returnKeyType和其他屬性,但在以後的更新中不會進行監視。在更改returnKeyType之後,請嘗試在文本字段中調用reloadInputViews,這應該指示它刷新鍵盤設置。

+0

它似乎工作。謝謝。 – yehnan 2011-05-11 02:45:20

+0

不適用於iOS 9 - 嘗試使用http:// stackoverflow。com/a/19405954/1633251 – 2016-06-11 05:00:47

7

不幸的是,-[reloadInputViews]會搞亂雙字節鍵盤上的鍵盤輸入。

雙字節鍵盤(例如漢字)在文本字段中放置了臨時字符,並要求用戶點擊輸入輔助鍵擊以確認輸入的字符。調用-[reloadInputViews]放棄二級擊鍵狀態。

我還沒有找到這種情況下的解決方案。

+0

當您在textField上調用reloadInputViews時,鍵盤會重置,這會將其更改回textField的默認值,例如從數字輸入切換到電子郵件輸入。如果returnKeyType更改,您可以通過僅調用reloadInputViews來最小化發生這種情況的頻率。代碼見下面的答案。 – 2013-05-02 20:43:32

+0

調用'[textField resignFirstResponder]; [textView becomeFirstResponder];',一個接一個地刷新鍵盤而不用動畫。 – cnotethegr8 2016-02-10 10:00:33

1

正如Animie所說,最好的方法是讓reloadInputViews告訴鍵盤有關的變化。

你可以這樣做:

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 

if(self.myTextField.editing){ 

     self.myTextField.editing.returnKeyType = UIReturnKeyNext;// or UIReturnKeyGo, etc. 

    } 
} 
在你的代碼

某處,在viewDidLoad中例如,註冊UIKeyboardWillShowNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 

而且當鍵盤顯示出來,你reloadInputViews

- (void)keyboardWillShow:(NSNotification *)notification{ 
    [self.myTextField reloadInputViews]; 

} 
2

有人建議調用reloadInputViews在textField上強制鍵盤的返回鍵進行更新。不幸的是,當您在textField上調用reloadInputViews時,鍵盤會重置,這會將其更改回textField的默認值,例如從數字輸入切換到電子郵件輸入。如果returnKeyType更改,您可以通過僅調用reloadInputViews來最小化發生這種情況的頻率。

int currentTextFieldReturnKeyType = textField.returnKeyType; 
[textField setReturnKeyType:UIReturnKeyGo]; 
if (currentTextFieldReturnKeyType != textField.returnKeyType) { 
    [textField reloadInputViews]; 
} 

這並不能完全解決問題,但會將其最小化爲返回鍵更改的一個按鍵。

0

正如大家所說,reloadInputViews將鍵盤重置爲其初始UIKeyboardType。蘋果應該給我們一個API來讓鍵盤輸入它的鍵盤類型,以便將它重新加載到輸入視圖之前的狀態。

使用新的iOS8 API,您可以創建自己的鍵盤來返回UIKeyboardType。

如果仍然使用iOS7,您可以詢問某個鍵盤子視圖處於哪種狀態。存儲該值並在需要時重置。看看我的來源:https://github.com/ustwo/US2KeyboardType

相關問題