使用代码摆脱numberpad并在字段上设置数字限制

时间:2012-12-23 16:11:58

标签: iphone objective-c xcode

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

我曾经有过这种方法,它可以触摸我视线的任何地方。连接是在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将在文本字段中。

谢谢!

2 个答案:

答案 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];

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