2015-11-02 91 views
2

IM在更改返回鍵類型時遇到問題,同時仍在編輯我的視圖的文本字段。所以當用戶點擊文本框時,我有一些檢查改變鍵盤的返回類型,這些檢查被放置在- (void)textFieldDidBeginEditing:(UITextField *)textField,當我在這裏更改鍵盤返回鍵代碼工作正常。我只是改變鍵盤重新調整鍵像這樣[textField setReturnKeyType:UIReturnKeyDone];。所以有2個文本框的用戶名和密碼。如果在這兩個文本字段中的文本我想要將返回鍵更改爲完成如果僅在其中一個文本字段中的文本我想將其更改爲NEXT因此我可以在文本字段之間來回跳轉。我在- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string中進行了一些制衡。然而,相同的代碼im放在textFieldDidBeginEditing不在這個功能。我讀了一堆帖子,他們都說,作爲第一響應者刪除文本字段,然後設置返回鍵,並再次成爲響應者,但這會擾亂我的當前流程在各自的方法。我也讀過,我必須在設置返回鍵後撥打[textfield reloadInputFields],但這又不起作用。你會認爲蘋果現在已經修復了這樣的錯誤。無論如何,有人在這裏有一些輸入嗎?在仍然編輯UITextField的同時更改返回鍵類型?

回答

1

試試吧,讓我知道

我已經演示了你的問題,它運行完美,按您的需要或您可以修改它按照

//這是編輯而改變這兩個文本框創建從故事板中操作事件

- (IBAction)txtEditingChanged:(UITextField *)sender 
{ 
    [sender resignFirstResponder]; 
    [sender becomeFirstResponder]; 
} 

//這是編輯難道Ë第二這兩個文本框創建從故事板中操作事件

- (IBAction)txtEditingEnd:(UITextField *)sender 
{ 
    if (txtUserName.text.length == 0 || txtPassword.text.length == 0) 
    { 
     [txtUserName setReturnKeyType:UIReturnKeyNext]; 
     [txtPassword setReturnKeyType:UIReturnKeyNext]; 
    } 
    else 
    { 
     [txtUserName setReturnKeyType:UIReturnKeyDone]; 
     [txtPassword setReturnKeyType:UIReturnKeyDone]; 
    } 
} 

//這是下一個和完成按鈕活動,即委託的UITextField

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    if (textField == txtUserName && textField.returnKeyType == UIReturnKeyNext && textField.text.length != 0) 
    { 
     [txtPassword becomeFirstResponder]; 
    } 
    else if (textField == txtPassword && textField.returnKeyType == UIReturnKeyNext && textField.text.length != 0) 
    { 
     [txtUserName becomeFirstResponder]; 
    } 
    else 
    { 
     // This is your Done Button Event You Can Procced Here 
    } 
    return YES; 
} 
+1

謝謝,但生病在未來的版本中嘗試它我工作,因爲我也需要它 – Esko918

0

我不得不實施,需要一個附加標籤邏輯根據輸入到UITextField中的文本更改鍵盤返回鍵。找到如何更改返回鍵很容易,但是當我開始測試時,我注意到這個解決方案只適用於iOS10,但不適用於iOS9。花了一些時間並做了一些研究之後,我想出了這個解決方法,它不是最好的,但至少可以工作。

if #available(iOS 10.0, *) { 
    textField.reloadInputViews() 
} else { 
    textField.keyboardType = .numberPad 
    textField.reloadInputViews() 
    textField.keyboardType = .default 
    textField.reloadInputViews() 
} 
相關問題