0

我是目标 c 的新手,所以请帮我解决这个问题...我在界面构建器中使用了三个文本字段 textfield1 输入第一个数字 textfield2 输入第二个数字

我创建了一个名为 sum 的按钮,它将计算总和,而 textfield(ans) 将显示结果

.h 文件代码

 {
      IBOutlet UITextfield txtfield1;
      IBOutlet UITextfield txtfield2;
      IBOutlet UITextfield ans;
 }
 -(IBAction)add;

.m 文件代码

 -(IBAction)add
  {
      int result=[txtfield1.text intValue]+[txtfield2.text intValue];
      ans.text=[NSString StringWithFormat:@"%d",result];
  }

程序运行良好,但我只想在文本字段中输入整数值,如果我输入字母并单击求和按钮,我得到 0 作为答案,我该怎么做才能让用户在输入字母时出错。 。谢谢..

4

4 回答 4

1

最好的方法是将键盘更改为仅数字,您可以直接从界面生成器中执行此操作,转到 UITextField 属性并在文本字段底部附近您将看到选项键盘,将其更改为:数字软垫

于 2012-04-10T18:13:22.587 回答
1

您必须在控制器中实现 UITextFieldDelegate 方法 [textFieldShouldReturn:]。

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:textField.text];
    if( [n notANumber] ) {
       // This means the user entered an invalid number;
       return NO;
    }
    return YES; // Do something with the number it is valid.
}

这将完成工作。

于 2012-04-10T18:19:35.300 回答
0

创建一个NSTextFieldCell子类(或适用于 iOS 的子类;下面的代码对纯 Cocoa 100% 有效),如下所示:

界面

#import <AppKit/AppKit.h>

@interface decimalCell : NSTextFieldCell

@end

执行

#import "decimalCell.h"
#import "NumberFormatter.h"

@implementation decimalCell

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void) awakeFromNib{

    NumberFormatter *formatter = [NumberFormatter withAllowedCharacters:@"0123456789"];
    [self setFormatter:formatter];

}

@end
于 2012-04-10T18:11:56.403 回答
0

-textField:shouldChangeCharactersInRange:replacementString:是一个委托方法,让您只允许某些字符出现在文本字段中。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}

这将返回 YES,因此只允许不在decimalDigitCharacterSet 字符集中的字符。

于 2012-04-10T18:51:03.787 回答