我一直在用xcode编写iphone应用程序,有一个包含电话号码字段的表单。它必须包含10位数字。如果用户首先在键盘中按0,则应用程序不得写入。
例如,电话号码为05551234567,用户只能写5551234567.如果用户按0,则没有任何反应。
答案 0 :(得分:9)
首先你应该使用
textView.keyboardType = UIKeyboardTypePhonePad
选择正确类型的键盘,这样您就可以只输入数字。
其次,您必须实现UITextViewDelegate
,将其设置为文本视图委托并实现自定义
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
将检查您是否尝试在内容的开头插入0并在此情况下返回NO
。
如果您使用的是UITextField
,那么一切都是一样的,唯一的区别就是您将使用UITextFieldDelegate
并实施
- (BOOL)textField:(UITextField *)textField shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
答案 1 :(得分:1)
尝试以下方法。
通过使用以下方法,用户无法在文本字段中输入0
- (BOOL)textField:(UITextField *)TextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"123456789"];
for (int i = 0; i < [string length]; i++)
{
unichar c = [string characterAtIndex:i];
if (![myCharSet characterIsMember:c])
{
return NO;
}
}
return YES;
}
如果您希望该用户不能仅在第一位输入0,请使用下面的方法
- (BOOL)textField:(UITextField *)TextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"123456789"];
if ([TextField.text length]<=0)
{
for (int i = 0; i < [string length]; i++)
{
unichar c = [string characterAtIndex:i];
if (![myCharSet characterIsMember:c])
{
return NO;
}
}
}
return YES;
}
我希望这会对你有所帮助。