我有几个(43)UITextField,我在UIPopoverController中以编程方式创建;大多数时候,用户忘记点击他/她最后一个条目的返回键,因此当弹出窗口失去焦点时,导致数据不能在最后一个文本字段中接受。输入数据的最后一个文本字段不一定是第43个,它可以是任何文本字段。
这是我创建textFields的代码;我错过了关于 FirstResponder 的事情吗?:
// create the UITextFields ("Database Fields") for user to match against their input field positions
CGRect nbrFieldRect = CGRectMake(x-20, y, 30.0f, 26.0f);
UITextField *nbrTextField = [[UITextField alloc] initWithFrame:nbrFieldRect];
nbrTextField.backgroundColor = colorYES? UIColorFromRGB(0xFFF9AF):[UIColor whiteColor];
nbrTextField.enabled = YES;
[nbrTextField setKeyboardType:UIKeyboardTypeNumberPad];
nbrTextField.textColor = [UIColor blackColor];
nbrTextField.tag = tagNumber;
nbrTextField.font = [UIFont systemFontOfSize:12.0f];
nbrTextField.borderStyle = UITextBorderStyleRoundedRect;
nbrTextField.returnKeyType = UIReturnKeyContinue;
nbrTextField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
nbrTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
[nbrTextField addTarget:self action:@selector(mapUserFields:) forControlEvents: UIControlEventEditingDidEnd]; // map contents when user has finished entering it
nbrTextField.delegate = self;
[theView addSubview:nbrTextField];
有没有办法以某种方式捕获并自动纠正这种情况?
答案 0 :(得分:0)
你可以使用UITextFieldDelegate
的方法
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField;
docs说:{
当要求其重新签署第一个响应者状态时,文本字段会调用此方法。当用户选择另一个控件或调用文本字段的resignFirstResponder方法时,可能会发生这种情况。但是,在焦点更改发生之前,文本字段会调用此方法并使您有机会阻止更改发生。
所以这应该让你有机会存储最后的文本字段内容。
答案 1 :(得分:0)
我修复了它(带有kludge)...添加了另一个UITextField供用户输入他的首字母;此时不会使用输入(缩写),但是它会将焦点从最后的 nbrTextField 移开。
感谢您的建议,感谢您的光临。 SD