簡體   English   中英

UITextField太早退出firstResponder

[英]UITextField resigning firstResponder too early

我有兩個UITextField實例。 所述returnKeyType第一個文本字段的是UIReturnKeyNext ,並且returnKeyType第二文本字段UIReturnKeyDone 基於這個SO答案 ,我正在嘗試在單擊“下一步”按鈕時辭退第一個文本字段的第一個響應者,然后讓第二個文本字段成為第一個響應者。 當在第二個文本字段上單擊“完成”按鈕時,第一個響應者將被解除,鍵盤將消失。

以下是我的代碼:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if (textField == _textFieldOne){
        [_textFieldOne resignFirstResponder];
        [settingsDictionary setObject: _textFieldOne.text forKey:@"TextFieldOneInfo"];
        [settingsDictionary stringValueForKey:@"TextFieldOneInfo"];
        [self postNotificationSettingsUpdate:settingsDictionary];

        didTestPostNotificationSettings = YES;
        [_textFieldTwo becomeFirstResponder];
    }
    if (textField == _textFieldTwo){
        [_textFieldTwo resignFirstResponder];
    }
    return YES;
}

單擊“下一步”按鈕時,第一個文本字段成功地重新占用第一個響應者,第二個文本字段確實成為新的第一個響應者。 但是,在單擊“完成”按鈕之前,第二個文本字段似乎立即重新簽名它的第一個響應者狀態。

任何人都可以告訴我為什么第二個文本字段在點擊“完成”按鈕之前就會重新啟動它的第一個響應者狀態? 謝謝!

編輯我已將問題縮小到以下代碼行:

[self postNotificationSettingsUpdate:settingsDictionary];

當它被注釋掉時,文本字段返回按鈕操作的行為與預期一致。

如果要切換textField,則無需調用resignFirstResponder 我成功地嘗試了這個:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if (textField == _textFieldOne){
        [_textFieldTwo becomeFirstResponder];
    }
    else if (textField == _textFieldTwo){
        [textField resignFirstResponder];
    }

return YES;

}

經過一番挖掘,我相信我找到了解決方案。

具體的違規行代碼如下:

    [self postNotificationSettingsUpdate:settingsDictionary];

它調用以下方法:

- (void)postNotificationSettingsUpdate:(NSDictionary *) updateDict {
    [self.dataCache setUserNotificationSettings:updateDict];
}

...通過網絡連接發送字典信息。

這些文本視圖存儲在UITableView行中。 在我看來發生的事情是,當調用此方法時,它重新加載了視圖。 解決方案是添加對[tableView beginUpdates];調用[tableView beginUpdates]; [tableView endUpdates]; - (BOOL)textFieldShouldReturn:(UITextField *)textField的開頭和結尾。

執行此操作后,當選擇第一個文本字段的“下一步”按鈕時,第二個文本字段將成為第一個響應者,並在選擇“完成”按鈕時將其重新簽名為第一個響應者狀態。

暫無
暫無

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

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