【发布时间】:2014-04-24 04:02:20
【问题描述】:
我有一个文本字段,用户输入一个数字并转换为整数。
键盘设置为十进制数字。除了粘贴功能仍处于启用状态,因此用户可以将文本粘贴到其中。
如果用户在其中输入非数值,我想将其设置为将标签更改为@“错误”。
我不想禁用粘贴功能,因为我仍然希望用户能够将自己的数值复制并粘贴到我的应用中。
【问题讨论】:
标签: ios objective-c cocoa-touch uitextfield
我有一个文本字段,用户输入一个数字并转换为整数。
键盘设置为十进制数字。除了粘贴功能仍处于启用状态,因此用户可以将文本粘贴到其中。
如果用户在其中输入非数值,我想将其设置为将标签更改为@“错误”。
我不想禁用粘贴功能,因为我仍然希望用户能够将自己的数值复制并粘贴到我的应用中。
【问题讨论】:
标签: ios objective-c cocoa-touch uitextfield
简单地禁止输入非数字字符是一种方法。但是您问的是如何检测非数字...
使用
NSRange range = [myTextField.text rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
if(range.location == NSNotFound) {
// then it is numeric only
}
【讨论】:
如果你想应用只能输入数值的限制,那么使用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 的答案是检查文本是否仅是数字的最佳答案。
【讨论】:
stringByTrimmingCharactersInSet: 仅从字符串的开头和结尾删除非数字字符,因此例如 0000aaa000 不会被更改,尽管它确实包含非数字值,但它是否有效。当用户将字符串粘贴到文本字段中时,这是一种可能性。
NSRange range = [myTextField.text rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
【讨论】: