如何为iOS(iPhone)应用程序配置十进制数字字段?

时间:2015-03-10 19:23:31

标签: ios objective-c iphone ios8 uitextfield

我有一个应用需要包含一个字段,用户可以在其中输入小数标量数字。有没有如何实现这一目标的方法?我已经阅读了Matt Neuburg"编程iOS 7"中的相关部分。书。我尝试过Cocoapod(MPNumericTextField)。我没有太多运气......

到目前为止我所取得的成就:

  1. 在我的故事板中画了UITextField
  2. 鉴于outletdelegate
  3. 将其Keyboard Type设置为Decimal Pad
  4. 实施了以下3种方法:

    - (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
        NSLog(@"textFieldShouldEndEditing:");
        [textField resignFirstResponder];
        return YES;
    }
    
    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        NSLog(@"textFieldShouldReturn:");
        [textField resignFirstResponder];
        return YES;
    }
    
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        NSLog(@"textFieldDidBeginEditing:");
        [textField selectAll: nil];
    }
    
  5. 似乎我必须实施textField:shouldChangeCharactersInRange:replacementString:方法以避免重复的小数点被放入。

    但是当我输入数字时,我无法弄清楚如何解除/关闭键盘。如果您关闭它,Decimal Pad的重点是什么?

    我还有其他事情要做一个简单的数字字段吗?

2 个答案:

答案 0 :(得分:1)

以下代码行可能满足您的需求

[self.view endEditing:YES];

答案 1 :(得分:0)

您需要像这样实现委托来扫描数字并避免价值加倍.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == _amountField) {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        if ([newString length] == 0) 
        {
            return YES;
        }

        double holder;

        NSScanner *scan = nil;

        scan = [NSScanner scannerWithString: newString];

        return ([scan scanDouble: &holder] && [scan isAtEnd]);
    }

    return YES;
}