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

Posted

技术标签:

【中文标题】没有按钮操作的多个 UITextfields 的总和【英文标题】:Sum of multiple UITextfields without a button action 【发布时间】:2011-12-16 08:16:43 【问题描述】:

我是 ios 开发的新手,我被困在这个问题上……实际上是其中之一。

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

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

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

【问题讨论】:

【参考方案1】:

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

- (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;

【讨论】:

这段代码很好用。但是,它需要一个返回键来计算。使用数字键盘根本不起作用。字段是否有任何方法可以在不使用返回键的情况下自动计算结果?我在字符串 @"d" 前面添加了一个 "%" 来修复错误。 您可以使用完成或下一步按钮在键盘上添加自定义工具栏。【参考方案2】:

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

您可以设置委托并使用:

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

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

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

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

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

【讨论】:

【参考方案3】:

您需要将字段限制为仅限数字。如果文本字段和:

,请确保您已将类添加为委托
- (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;

【讨论】:

当我输入此代码时,我收到一条错误消息,提示“接收器类型 'UITextField' 例如消息未声明带有选择器 'doubleValue' 的方法。在 3 行中的每一行旁边。 我进行了编辑...您需要访问该字段的文本属性...抱歉...

以上是关于没有按钮操作的多个 UITextfields 的总和的主要内容,如果未能解决你的问题,请参考以下文章

在 UIButton 点击​​上添加多个 UITextFields

尝试将多个 Uitextfields 添加为整数 [重复]

具有多个 UITextFields 的 iOS UITableViewCell 子类滚动出视图

UIpickerView 在同一个 ScrollView 中填充多个 uitextFields

关闭生成的 UITextfields

按标签查找uitextfields