我有一个文本字段,其中键盘类型为号码。
我曾经有这种方法,该方法与视图上任何地方的触摸连接在一起。连接是在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个。
谢谢!
您需要一个数字格式化,首先将其分配并设置其主要属性:
@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];
就删除软键盘而言,您可以从视图的视图控制器类中将以下消息发送到您的视图,并且它将删除键盘:
[self.view endEditing:YES];
当用户触摸背景时,将其触发的一种方法是将TAP事件添加到视图中,然后将上述消息放入Tap手势事件处理程序中。