我是iOS
的新手,
我希望在UITextField
,
例如:我有@"AEBPQ1234M"
对于前5个字母我想要字母键盘然后接下来的4个字母我需要数字键盘和最后一个字母我需要再次字母。
这是我尝试过的代码,但是当我在键盘上按下退格键时它无效。
-(void)textFieldDidChange :(UITextField *)theTextField{
if (theTextField.text.length < 5 || theTextField.text.length >= 9) {
[theTextField setKeyboardType:UIKeyboardTypeEmailAddress];
}
if (theTextField.text.length >= 5 && theTextField.text.length < 9 ) {
[theTextField setKeyboardType: UIKeyboardTypeNumberPad];
}
[theTextField reloadInputViews];
}
我在哪里弄错了?
答案 0 :(得分:0)
试试这个 -
@Cacheable
答案 1 :(得分:0)
使用此
selector
textEditingChanged:
应该监听UIControlEventEditingChanged
事件
//在viewDidLoad
[self.textField addTarget:self action:@selector(textEditingChanged:) forControlEvents:UIControlEventEditingChanged];
-(void)textEditingChanged:(UITextField*) sender{
if (sender.text.length > 5 && sender.text.length < 9 ) {
[self.textField setKeyboardType: UIKeyboardTypeNumberPad];
}
if (sender.text.length < 5 || sender.text.length == 10) {
[self.textField setKeyboardType:UIKeyboardTypeEmailAddress];
}
[self.textField reloadInputViews];
}
对于在手机键盘中输入速度非常快的用户而言,这将是一次糟糕的体验。
答案 2 :(得分:0)
尝试以下代码。
首先在UITextFieldDelegate
文件中声明.h
。同时设置自己的委托。
您可以设置两种类型的自我委托: -
1.故事板
2.代码
使用textField.delegate = self;
方法中的代码编写viewDidLoad
进行设置时。
现在使用.m
文件
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField.text.length < 4 || textField.text.length > 7) {
[textField setKeyboardType: UIKeyboardTypeEmailAddress];
} else {
[textField setKeyboardType: UIKeyboardTypeNumberPad];
}
[textField reloadInputViews];
return YES;
}
答案 3 :(得分:0)
请检查我的答案。它运作完美。我尝试过,然后我才在这里发布答案。
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if(string.length == 0 && range.location == 9)
range.location = range.location - 2;
if(string.length == 0 && range.location == 8)
range.location = range.location - 1;
if(string.length == 0 && range.location > 3)
range.location = range.location - 2;
if(range.location <= 3){
textField.keyboardType = UIKeyboardTypeAlphabet;
[textField reloadInputViews];
return YES;
}
else if(range.location > 3 && range.location <= 7){
textField.keyboardType = UIKeyboardTypeNumberPad;
[textField reloadInputViews];
return YES;
}
else if(range.location > 7){
textField.keyboardType = UIKeyboardTypeAlphabet;
[textField reloadInputViews];
return YES;
}
else{
return NO;
}
return YES;
}
答案 4 :(得分:0)
我建议使用多个textField,每个textField都有自己的键盘类型。
然后在你的结尾,你可以将输入的字符串附加在一起,做你需要做的事情。这是更好的用户体验,也更容易做到。