我有一个文本字段,键盘类型是数字键盘。
我曾经有过这种方法,它可以触摸我视线的任何地方。连接是在xib文件中进行的。它没有问题。
-(IBAction)closeKeypad:(id)sender
{
[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
}
然后我需要限制用户可以输入的值(最多100个)。
我最终得到了以下内容。
- (void)textFieldDidEndEditing:(UITextField *)textField {
//if value is greater than 100, display error message//
int integer = [textField.text intValue]; //convert value into integer//
if (integer > 100) {
UIAlertView *tooHigh = [[UIAlertView alloc] initWithTitle:@"Invalid" message:@"Number cannot be over 100" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[tooHigh show];
}
现在我需要2件事
1)如果用户输入的数字超过100,则文本字段将被清除,键盘将保留在该文本字段中。
2)触摸背景时摆脱键盘的一种方法。我猜我需要一个基于代码的解决方案?
使用之前的实现,我可以输入200,然后我会得到错误,但键盘会关闭,200将在文本字段中。
谢谢!
答案 0 :(得分:1)
您需要一个数字格式化程序,首先分配它并设置它的主要属性:
@property (nonatomic,strong) NSNUmberFormatter* formatter;
在实施中:
self.formatter=[NSNUmberFormatter new];
formatter.numberStyle= NSNumberFormatterDecimalStyle;
formatter.maximum= @100;
然后:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
NSNumber* value;
BOOL correct=[formatter getObjectValue: &value forString: self.textField.text errorDescription: nil];
if(!correct)
{
self.textField.text= @""; // clear text
}
}
对于第二部分,在视图控制器中启用用户交互:
self.view.userInteractionEnabled= YES;
然后实现这个方法:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
只有触及无法成为第一响应者的视图时才会收到通知,因此请重新签名文本字段的第一个响应者:
if(textField.isFirstResponder)
[textField resignFirstResponder];
答案 1 :(得分:0)
就解雇软键盘而言,您可以从视图的View Controller类中向视图发送以下消息,它将关闭键盘:
[self.view endEditing:YES];
当用户触摸背景时触发此操作的一种方法是向视图添加点击事件,并将上述消息放入点击手势事件处理程序中。