0

iOS6

我在一个场景中有 6 个 UITextFields,带有一个 Next 按钮,可以将其转移到下一个场景中。

当我点击键盘上的完成按钮时,下面的代码效果很好:

- (IBAction)dismissKeyboard:(id)sender
{
    if (sender == LocationName) {
    self.meeting.LocationName = LocationName.text;
    }

    if (sender == LocationAddress) {
    self.meeting.LocationAddress = LocationAddress.text;
    }

    if (sender == LocationCity) {
    self.meeting.LocationCity = LocationCity.text;
    }

//I have 3 more text fields after and then I persist to CoreData:

    NSError *error = nil;
    if (![managedObjectContext save:&error]) {
    }

    [sender endEditing:YES];
}

如果用户点击键盘上的完成按钮,则数据保存良好。

但是,如果用户点击导航栏上的 Next 按钮,而没有先点击键盘上的 Done 按钮,则用户在 UITextfield 内键入的内容不会保存。当用户点击导航栏上的下一步按钮调用下一个场景时,我希望用户在所有字段中键入数据(用户从键盘输入的数据)保存。

我有下一个按钮的以下代码:

- (IBAction)nextButtonPressed:(id)sender {

    [self dismissKeyboard:sender];
}

我知道 nextButtonPressed 的代码是错误的。我想我需要帮助来确定哪个 UITextField 调用了 Keyboard 以使其可见,然后通过将 Sender 作为参数传递来调用dismissKeyboard。

谢谢

4

1 回答 1

1

使用UITextField委托方法textFieldDidEndEditing:来了解焦点何时离开文本字段。这是您应该保存其数据的时候。当焦点移动到另一个文本字段或键盘完全关闭时,将调用此方法。

您的实现nextButtonPressed:应该简单地调用becomeFirstResponder下一个文本字段是什么。而已。通过将另一个文本字段设置为第一响应者,前一个文本字段将调用其textFieldDidEndEditing:委托。

更新:

// This assumes the LocationXXX are instance variables referencing the UITextFields
- (IBAction)nextButtonPressed:(id)sender {
    if (sender == LocationName) {
        [LocationAddress becomeFirstResponder];
    } else if (sender == LocationAddress) {
        [LocationCity becomeFirstResponder];
    // add the rest as needed
    }
}
于 2013-02-25T18:58:18.427 回答