簡體   English   中英

UITextField在resignFirstResponder上的奇怪行為

[英]UITextField strange behaviour on resignFirstResponder

已經是第二天了,無法解決問題,

我已經UITabelView使用自定義UICellViews ,每個自定義UICellView組成UILabelUITextField

自定義UICellView對象在其init方法中分配UITextFieldUILabel ,並在dealloc中釋放。

UITableView的自定義UICellViews數量為6。

用戶場景如下

  • 當用戶從1到5單擊時,將打開虛擬鍵盤的UITextFields並輸入一些文本
  • 如果虛擬鍵盤處於活動狀態,則用戶單擊第6個UITextField時,應將其隱藏,如果隱藏,則不應顯示。

在我的UIViewController類中實現UITextFieldDelegate協議,並將每個UITextField的委托設置為self。

我的委托方法如下

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if (textField.tag != 6) {
        return YES;
    } else {
        [textField resignFirstResponder];
        return NO;
    }
}

-(BOOL)  textFieldShouldEndEditing:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

-(void) textFieldDidBeginEditing:(UITextField *)textField {
     /* Some code */
}

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
}

所有功能都正常!

所以現在,虛擬鍵盤永遠不會被隱藏,為什么會發生這種情況?

PS。 類似的代碼已在iPhone上運行,但此問題在iPad上存在。

您需要知道最后使用哪個文本字段! 因此您可以執行[lastUsedTextField resignFirstResponder]

有一個骯臟但可行的技巧..您可以將文本字段設置為新的活動UITextField,並在下一個周期立即調用resignFirstResponder:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if (textField.tag != 6) {
        return YES;
    } else {
        // this will schedule keyboard dismissal for the current text field
        dispatch_async(dispatch_get_main_queue(), ^{
            [textField resignFirstResponder];
        });
        return YES; // -> make this one active
    }
}

您是否為textField設置了操作?

[YourTextField addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];

PS為任何ControlEvent設置任何選擇器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM