iOS6的
我在一个场景中有6个UITextFields,下一个按钮可以进入下一个场景。
当我按下键盘上的“完成”按钮时,下面的代码效果很好:
- (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];
}
如果用户点击键盘上的完成按钮,则数据保存正常。
但是,如果用户点击导航栏上的“下一步”按钮,而没有首先按下键盘上的“完成”按钮,则在UITextfield内键入的用户不会保存。我希望当用户点击导航栏上的下一个按钮以调用下一个场景时,保存所有字段中用户输入的数据(用户从键盘输入的数据)。
我有下面按钮的以下代码:
- (IBAction)nextButtonPressed:(id)sender {
[self dismissKeyboard:sender];
}
我知道nextButtonPressed的代码是错误的。我想我需要帮助识别哪个UITextField称为键盘是可见的,然后通过将Sender作为参数调用来调用dismissKeyboard。
由于
答案 0 :(得分: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
}
}