【问题标题】:How do I detect if a text field has text in it rather than a numerical value?如何检测文本字段中是否包含文本而不是数值?
【发布时间】:2014-04-24 04:02:20
【问题描述】:

我有一个文本字段,用户输入一个数字并转换为整数。

键盘设置为十进制数字。除了粘贴功能仍处于启用状态,因此用户可以将文本粘贴到其中。

如果用户在其中输入非数值,我想将其设置为将标签更改为@“错误”。

我不想禁用粘贴功能,因为我仍然希望用户能够将自己的数值复制并粘贴到我的应用中。

【问题讨论】:

标签: ios objective-c cocoa-touch uitextfield


【解决方案1】:

简单地禁止输入非数字字符是一种方法。但是您问的是如何检测非数字...

使用

NSRange range = [myTextField.text rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
if(range.location == NSNotFound) {
    // then it is numeric only
}

【讨论】:

  • 美丽。非常简洁易读,是标准库的出色实现。
  • 所以我在 if 语句中包含 label.text = @"error" 对吗?
  • 它在 [[NSCharacterSet] 之后显示“预期标识符”
  • 是的,可以。我不确定这是最好的用户体验。一方面,您通过仅要求非数字来混淆他们,尽管您在同一个地方显示非数字。我会考虑一个仅询问数字的弹出标签 - 不是模式对话框,只是一个提示,在文本字段附近很容易看到。 (该代码中有一个错字 - 但现在已修复)
  • 你想要 iPatel 的答案 - 如果遇到非数字字符,则从 shouldChangeCharactersInRange 返回 NO。您可以在该函数中使用我提供的代码,并在它说“仅是数字”的地方返回 YES,否则返回 NO。
【解决方案2】:

如果你想应用只能输入数值的限制,那么使用UITextField的委托方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
   NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
   return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0) || [string isEqualToString:@""];
}  

如果字符串是数字,这将返回 YES,否则返回 NO

编辑:

@Adam 的答案是检查文本是否仅是数字的最佳答案。

【讨论】:

  • 我不明白该把它放在哪里,我应该做些什么来让它与相应的文本字段相关联?
  • 还是迷路了,很抱歉我对编码很陌生。我不知道该怎么做!
  • 在 .h 文件中声明 UITextFieldDelegate 然后声明 textValue.delegate = self;进入viewDidLoad方法,在.m文件中然后使用上面这个方法
  • stringByTrimmingCharactersInSet: 仅从字符串的开头和结尾删除非数字字符,因此例如 0000aaa000 不会被更改,尽管它确实包含非数字值,但它是否有效。当用户将字符串粘贴到文本字段中时,这是一种可能性。
【解决方案3】:
NSRange    range    =    [myTextField.text    rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2019-05-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多