没有按钮操作的多个 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 的 iOS UITableViewCell 子类滚动出视图