插入多个字符时关闭文本字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入多个字符时关闭文本字段相关的知识,希望对你有一定的参考价值。
我有一个文本字段,我想插入一个电话号码。问题是我使用数字键盘,没有任何输入键,我没有该键,我不知道如何关闭文本字段。
是否有任何方法可以检查文本字段中有多少个字符,并在有字符时关闭数字键盘?
对不起我的英语和抱歉的noob问题,但我刚开始与ObjC。
谢谢 *
对不起伙计们,我忘了告诉你我已经尝试过了:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField.text.length== 9) {
[textField resignFirstResponder];
}
return YES;
}
是的,我认为你有两个选择,你可以:
A.检查委托方法shouldChangeTextInRange中返回的字符数,然后如果达到限制则辞职第一响应者(当您辞职第一响应者时键盘解除,
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ( textView.text.length + (text.length - range.length) == 10) //or whatever value you like
{
[textField resignFirstResponder];
}
}
或者B:
覆盖视图的touchesEnded方法并调用resignFirstResponder,以便当用户触摸textField外部的视图时,键盘会解除。 - 这就是我在我的应用程序中所做的。
像这样:
只需将此方法添加到viewController中,当视图中的触摸结束时,它将自动调用,在此方法中,只需resignFirstResponder,键盘就会消失。
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[textField resignFirstResponder];
}
我觉得最好在touchesEnded中做这个比开始做的更好,当你从视图中抬起手指而不是最初触摸它时,让键盘消失感觉更好。
我发现resignFirstResponder不包括最后输入的char。我必须这样做,
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
DLog(@"Existing: %@, string: %@, range:(%lu, %lu)", textField.text, string, (unsigned long)range.location, (unsigned long)range.length);
if (textField == field2.textField) {
if ( textField.text.length + (string.length - range.length) == kMyNumberLength) // e.g. 10
{
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
[textField resignFirstResponder];
}
if (textField.text.length + string.length - range.length > kMyNumberLength) {
return NO;
} else {
return YES;
}
}
return YES;
}
每次用户添加数字时,都会通过以下方法通知您的文本字段的代理:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger length = [[textField text] length] - range.length + string.length;
if (length == ...) ...
}
您可以设置代理,以便观察文本字段的修改内容的长度,并在达到预期长度时关闭字段。
然而,这很有可能让你的用户受到很多挫折:他们会偶尔输入最后一个角色,并且该领域将会关闭它们,而不是让他们纠正问题。更好的方法是dismiss the pad when users tap away from your text field,它可以让最终用户控制正在发生的事情:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[textField resignFirstResponder];
}
迅速
达到最大字符数时,将新字符添加到textfield
中的当前文本,然后关闭键盘
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let maxLength = 5
let currentString: NSString = textField.text! as NSString
let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
if newString.length == maxLength {
textField.text = textField.text! + string
textField.resignFirstResponder()
}
return newString.length <= maxLength
}
您可以在其上放置一个带有Done的工具栏,单击该按钮也可以隐藏键盘和工具栏。
-(IBAction)doneButtonClicked:(id)sender{
[yourTextField resignFirstResponder];
[toolBar setHidden:YES];
}
或者您可以使用this自定义工具
使用此textfield委托方法查找textField.text的长度
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int textLength = [textField.text length] + 1;
return YES;
}
以上是关于插入多个字符时关闭文本字段的主要内容,如果未能解决你的问题,请参考以下文章