1

我有一个文本字段,其中键盘类型是数字键盘。

我曾经有这种方法,它与触摸我视野中的任何地方有关。连接是在 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];

}

现在我需要两件事

1) 如果用户输入超过 100 的数字,则文本字段被清除,键盘停留在该文本字段中。

2)一种在触摸背景时摆脱键盘的方法。我猜我需要一个基于代码的解决方案?

在之前的实现中,我可以输入 200,然后我会收到错误,但键盘会关闭,并且 200 会出现在文本字段中。

谢谢!

4

2 回答 2

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];
于 2012-12-23T16:34:34.397 回答
0

至于关闭软键盘,您可以从视图的 View Controller 类中向您的视图发送以下消息,它将关闭键盘:

[self.view endEditing:YES];

当用户触摸背景时触发它的一种方法是向视图添加一个点击事件,并将上述消息放入点击手势事件处理程序中。

于 2012-12-23T19:25:06.067 回答