我是目标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,我该怎么做才能让用户在他得到错误时输入字母..谢谢..
答案 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字符集中不的字符。