没有按钮操作的多个UITextfields的总和

时间:2011-12-16 08:16:44

标签: ios cocoa-touch uitextfield

我是iOS开发的新手,我坚持这个问题......实际上是其中之一。

我有一个简单的笔尖,有3个UITextfield和一个UILabel。我想计算每个文本字段中输入的3个数字的总和,而不必使用按钮操作...基本上是实时的。 enter image description here

@property (nonatomic, strong) IBOutlet UITextField *firstNumber;
@property (nonatomic, strong) IBOutlet UITextField *secondNumber;
@property (nonatomic, strong) IBOutlet UITextField *thirdNumber;
@property (nonatomic, strong) IBOutlet UILabel *total;

我已经设置了实现,但我甚至不知道如何处理它。

3 个答案:

答案 0 :(得分:3)

首先将委托自我设置为您的文本字段

- (void)viewDidLoad 
{
    [super viewDidLoad];
    [firstTextField setDelegate:self];
    [secondTextField setDelegate:self];
    [thirdTextField setDelegate:self];
}

按以下方法计算总数。

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    total.text = [NSString stringWithFormat:@"d",([firstTextField.text intValue])+([secondTextField.text intValue])+([thirdTextField.text intValue])];
    return YES;
}

答案 1 :(得分:1)

实际上有两种方法可以做到这一点。

您可以设置代理并使用:

- (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) string;

或者您可以使用NSNotificationCenter并使用:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextFieldTextDidChangeNotification object:nil];

委托函数是我最喜欢的,只需获取此方法中所有文本字段的值,将它们相互添加并随意返回值。

通知中心几乎做了同样的事情,但你必须在选择器方法(textDidChange :)中进行计算。

答案 2 :(得分:0)

您只想将字段限制为数字。如果文本字段为:

,请确保已将该类添加为委托
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}

更新字段on an interval

- (void)updateTotal
{
     double first = [firstNumber.text doubleValue];
     double second = [secondNumber.text doubleValue];
     double third = [thirdNumber.text doubleValue];

     double tot = first+second+third;

    NSString* totalString = [NSString stringWithFormat:@"%d", tot];
    total.text = totalString;
}