UItextfield shouldChangeCharactersInRange 方法退格不起作用
Posted
技术标签:
【中文标题】UItextfield shouldChangeCharactersInRange 方法退格不起作用【英文标题】:UItextfield shouldChangeCharactersInRange method backSpace not working 【发布时间】:2014-12-06 06:43:21 【问题描述】:我实现了这段代码,但退格键不起作用,直到我按下 UITextfield 中的删除按钮 我想用退格键删除。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:_demo_str];
for (int i = 0; i < [string length]; i++)
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c])
return YES;
return NO;
【问题讨论】:
当退格键被点击时,string
将是空字符串,所以你返回 NO
这意味着更改将被忽略,所以什么也不会发生。
@rmaddy 那我该怎么做呢?
如果string
为空,则返回YES
,以便处理删除。
@rmaddy 不,我不能这样做,因为我指定了一些条件,在该条件下用户只能输入从开始范围到结束范围的特定值
【参考方案1】:
试试这个代码。这对我有用
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:_demo_str];
for (int i = 0; i < [string length]; i++)
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c])
return YES;
else
return NO;
return YES;
【讨论】:
【参考方案2】:使用此代码:
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString: _demo_str];
if(range.length > 0)
if( !string || [string isEqualToString:@""] || string.length == 0)
return YES;
else
for (int i = 0; i < [string length]; i++)
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c])
return YES;
return NO;
else
for (int i = 0; i < [string length]; i++)
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c])
return YES;
return NO;
【讨论】:
range.length
在不按退格键的情况下将变为1
。当点击退格键时,长度可以不是1
。这个答案不起作用。
你能解释一下它不起作用的一种情况吗?
我可以给你两个。 1) 突出显示文本字段中的一个字符并点击一个字母。 range.length
是 1
但没有点击退格键。 2) 突出显示文本字段中的两个或多个字符并点击退格键。 range.length
不会是 1
,但退格键被点击了。
换句话说,range.length
与是否按下退格键无关。
您的最新更新仍然是错误的。根本不需要检查range.length
。而您过长的if
语句检查string
应该只是if (!string.length)
。以上是关于UItextfield shouldChangeCharactersInRange 方法退格不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 UITextField 操作中将 UITextField 字符串转换为 Double
如何调整 UITextField 占位符文本以适合 UITextField 宽度?
如果添加了新的 UITextField,如何向下移动许多 UITextField