为 UITextField 设置文本后无法调用 shouldChangeCharactersInRange
Posted
技术标签:
【中文标题】为 UITextField 设置文本后无法调用 shouldChangeCharactersInRange【英文标题】:shouldChangeCharactersInRange cannot be called after set text for UITextField 【发布时间】:2012-11-26 01:46:38 【问题描述】:我正在使用 UITextField 输入值,将其委托设置为父视图控制器,使用 textField.text = @"some text" 为文本字段设置文本值后,委托函数 textField:shouldChangeCharactersInRange:replacementString: 不能调用任何更多的。 如何防止这种情况或允许在 setText 之后调用此函数? 提前致谢, 对不起我的英语不好。 更新: textField:shouldChangeCharactersInRange:replacementString: 当我第二次点击“退格”时无法调用。
【问题讨论】:
【参考方案1】:当您在代码中设置文本时,不应调用该方法。你为什么想要它——你传递的是你想要的确切文本,所以不需要更改或验证它。
【讨论】:
【参考方案2】:如果您的意思是委托中的方法完全停止调用,设置文本字段不是原因。你需要做其他事情才能导致这种情况。正如@rdelmar 所说,它不会被调用来进行分配,但会被调用以进行未来的编辑。例如,如果我写...
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
self.textField.text = @"View will appear";
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSLog(@"Replacement: %@", string);
return YES;
...我明白了...
2012-11-25 21:02:34.456 Hello World[6669:c07] Replacement: H
2012-11-25 21:02:34.954 Hello World[6669:c07] Replacement: e
2012-11-25 21:02:35.838 Hello World[6669:c07] Replacement: l
2012-11-25 21:02:35.974 Hello World[6669:c07] Replacement: l
2012-11-25 21:02:36.162 Hello World[6669:c07] Replacement: o
【讨论】:
我正在实现这样的委托函数: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string if ([string isEqualToString:@"" ]) textField.text = nil; // 或 = @"abc.."; 返回是; 点击“退格”键后,无法再调用此委托函数(如果 setText 在其他委托函数中,也会发生) @jptsetung 回答了这个问题,但我想找到解决方案来防止它。 ***.com/questions/4674023/… 对不起,如果我再输入一次“退格”,就会发生这种情况。以上是关于为 UITextField 设置文本后无法调用 shouldChangeCharactersInRange的主要内容,如果未能解决你的问题,请参考以下文章
自动更正文本时,UITextField 未调用 editorChanged 事件
如何将设置为 uitextfield 的框架更改为 uibutton