0

我有两个 UITextField 实例。第returnKeyType一个文本字段的 是UIReturnKeyNextreturnKeyType第二个文本字段是UIReturnKeyDone。基于这个 SO answer,我正在尝试在单击“下一步”按钮时辞去第一个文本字段的第一响应者,然后让第二个文本字段成为第一响应者。当在第二个文本字段上单击“完成”按钮时,第一响应者辞职,键盘消失。

下面是我的代码:

- (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];

当它被注释掉时,文本字段返回按钮操作按预期运行。

4

2 回答 2

0

经过一番挖掘,我相信我找到了解决方案。

具体的违规代码行如下:

    [self postNotificationSettingsUpdate:settingsDictionary];

它调用以下方法:

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

...通过网络连接发送字典信息。

这些文本视图存储在 UITableView 行中。在我看来正在发生的是,当这个方法被调用时,它重新加载了视图。解决方案 [tableView beginUpdates];[tableView endUpdates];- (BOOL)textFieldShouldReturn:(UITextField *)textField.

After doing that, the second-text field would become the first responder when the 'Next' button of the first-text field was selected, and would resign it's first responder status when the 'Done' button was selected.

于 2015-03-04T16:44:42.890 回答
0

resignFirstResponder如果要切换文本字段,则无需调用。我已经成功地尝试了这个:

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

return YES;

}
于 2015-03-03T21:27:57.343 回答