UITextfield 更改键盘
Posted
技术标签:
【中文标题】UITextfield 更改键盘【英文标题】:UITextfield Change keyboard 【发布时间】:2017-08-02 12:34:59 【问题描述】:我是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];
我哪里出错了?
【问题讨论】:
在其他情况下工作?尝试使用`textfieldshouldchangecharactersinrange`Delegate 这不是理想的方法。你不应该改变键盘。用户体验不好。 你能帮我获取代码吗?我是 iOS 新手 苹果开发者请检查我的回答。它有效。 【参考方案1】:试试这个-
-(void)textFieldDidChange :(UITextField *)theTextField
if (panNumber.length <= 5 || panNumber.length > 9)
[theTextField setKeyboardType:UIKeyboardTypeEmailAddress];
else
[theTextField setKeyboardType: UIKeyboardTypeNumberPad];
[theTextField reloadInputViews];
【讨论】:
【参考方案2】:使用这个
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];
对于在手机键盘上打字非常快的用户来说,这将是一种糟糕的体验。
【讨论】:
@Appledeveloper 这个方法textEditingChanged
是否使用故事板连接到 UITextView?【参考方案3】:
试试下面的代码。
首先在您的.h
文件中声明UITextFieldDelegate
。还将它的委托设置为 self.
您可以使用两种类型设置自我委托:- 1. 故事板 2.代码
使用代码设置时,在viewDidLoad
方法中写入textField.delegate = self;
。
现在在.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;
【讨论】:
【参考方案4】:我建议使用多个文本字段,每个文本字段都有自己的键盘类型。
然后,您可以将输入的字符串附加在一起以执行您需要执行的任何操作。这样用户体验更好,操作也更简单。
【讨论】:
【参考方案5】:请检查我的答案。它工作得很好。我试过了,然后我才在这里发布答案。
-(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;
【讨论】:
我们前进时它可以工作,但是当我按退格键或我剪切一个字符时它不起作用:(以上是关于UITextfield 更改键盘的主要内容,如果未能解决你的问题,请参考以下文章
第一次更改 UITextField 属性时 isSecureTextEntry 键盘闪烁
UITextField 在我开始输入时保持/保存值,而无需我点击“完成/保存”按钮