使用textfield添加两个数字

时间:2012-04-10 18:07:07

标签: objective-c ios cocoa uitextfield nsnumberformatter

我是目标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作为ans,我该怎么做才能让用户在他得到错误时输入字母..谢谢..

4 个答案:

答案 0 :(得分:1)

最好的方法是将键盘更改为仅数字,然后您可以直接从Interface Builder执行此操作,转到UITextField属性并在文本字段底部附近,您将看到选项键盘,更改它to:Number Pad

答案 1 :(得分: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.
}

这将完成工作。

答案 2 :(得分: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

答案 3 :(得分: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字符集中的字符。