Iphone 使用代码消除numberpad并对字段设置数字限制
我有一个文本字段,其中键盘类型是数字键盘 我曾经有过这样一种方法,它可以连接到我视野中的任何地方。连接是在xib文件中建立的。它毫无问题地工作了Iphone 使用代码消除numberpad并对字段设置数字限制,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我有一个文本字段,其中键盘类型是数字键盘 我曾经有过这样一种方法,它可以连接到我视野中的任何地方。连接是在xib文件中建立的。它毫无问题地工作了 -(IBAction)closeKeypad:(id)sender { [textField1 resignFirstResponder]; [textField2 resignFirstResponder]; } 然后,我需要对用户可以输入的值设置一个限制(最大值为100) 我的结论如下 - (void)textFieldDidEndEdit
-(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将在文本字段中
谢谢 您需要一个数字格式化程序,首先分配它并设置它的主要属性:
@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];
您需要一个数字格式化程序,首先分配它并设置它的主要属性:
@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];
当用户触摸背景时触发此操作的一种方法是向视图中添加一个点击事件,并将上述消息放入点击手势事件处理程序。至于关闭软键盘,您可以从视图的视图控制器类中向视图发送以下消息,它将关闭键盘:
[self.view endEditing:YES];
当用户触摸背景时触发此操作的一种方法是在视图中添加一个点击事件,并将上述消息放入点击手势事件处理程序。由于您有两个不同的问题,如果您提出这两个不同的问题,您可能会得到更好的答案。否则,只知道如何回答一部分的人可能不会回答,因为你将无法“奖励”正确答案,因为它只回答两个问题中的一个。因为你有两个不同的问题,如果你提出这两个不同的问题,你可能会得到更好的答案。否则,只知道如何回答一部分的人可能不会回答,因为您将无法“奖励”正确答案,因为它只回答两部分中的一部分。抱歉,我不确定在何处键入这部分代码。self.formatter=[nsnumberformatternew];formatter.numberStyle=NSNumberFormatterDecimalStyle;格式化程序。最大值=@100;在view controller.xcode的viewDidLoad方法中,有一个错误。它希望格式化程序成为_格式化程序为什么?我的错,我没有合成,现在都排序好了。我不确定我应该如何使用你对第二个问题给出的答案。我已经启用了用户交互。您要求我实现的方法,该方法中的实际代码是什么?我把if(textField.isFirstResponder)[textField resignFirstResponder]放在哪里;抱歉,如果这些都是基本问题,仍在学习中。谢谢,我不知道在哪里输入这部分代码。self.formatter=[nsnumberformatternew];formatter.numberStyle=NSNumberFormatterDecimalStyle;格式化程序。最大值=@100;在view controller.xcode的viewDidLoad方法中,有一个错误。它希望格式化程序成为_格式化程序为什么?我的错,我没有合成,现在都排序好了。我不确定我应该如何使用你对第二个问题给出的答案。我已经启用了用户交互。您要求我实现的方法,该方法中的实际代码是什么?我把if(textField.isFirstResponder)[textField resignFirstResponder]放在哪里;抱歉,如果这些都是基本问题,仍在学习中。谢谢