Gen*_*ari 10 uitextfield uicontrol ios uitextfielddelegate
如果我想处理对UITextField的更改,例如用户输入它; 看起来这可以通过为该文本字段分配委托,然后让委托实现shouldChangeCharactersInRange,或者通过向textField添加目标,以及处理UIControlEventEditingChanged事件来完成.
除了使用委托方法,您可以返回NO并因此阻止用户进行编辑,这两件事之间有什么区别吗?
处理编辑开始或编辑结束的问题相同.可以使用适当的委托方法或适当的事件来完成.如果控件事件可以执行必要的工作,那么textField委托实际上是什么?
shouldChangeCharactersInRange在更改发生之前调用,并为您提供"取消"更改的机会. UIControlEventEditingChanged在发生变化后调用.
您可以确定textField的结果值shouldChangeCharactersInRange,但必须使用提供的范围手动将replacementString应用于现有文本.(通过NSString stringByReplacingCharactersInRange).如果您想知道生成的文本,使用它会更容易,更有效UIControlEventEditingChanged.
shouldChangeCharactersInRange通常用于实现输入的验证检查 - 也就是说,您可以在输入时过滤字符/粘贴文本.例如,如果字段用于电话号码,则可以FALSE在用户键入非数字字符时返回,或者尝试粘贴非数字的文本.
您可能会发现一个案例,如果您坚持使用,您可以重复使用多个控件的代码 UIControlEvent-methods.
你是对的; 你可以基本上通过两者做同样的事情,但是UIControl是较低级别的,并且允许你通过[UIControl addTarget:action:forControlEvents:]只有一个委托的位置将每个特定的UIEvent吸引到不同的目标.
我还要说UITextField委托协议只是作为一种管理UITextField行为的方式,作为UIControl/UIEvent的一种更方便,更高级别的替代方案.
最常见的委托模式是UITableView DataSource和Delegate,我会说使用UITextField委托协议是非常相似的,因此看起来比直接从UIControl处理消息更明确的意图更直接.
小智 6
我在原始问题中提出的两种方法之间发现的一个关键区别是委托在变更中的值之前"shouldChangeCharactersInRange"被调用.在更改中的值之后调用目标. UITextFieldUIControlEventEditingChangedUITextField
如果您正在使用这些事件来确保(例如)在启用"完成"按钮之前完全填充对话框中的所有字段,则目标方法可能更适合您.它对我有用.
| 归档时间: |
|
| 查看次数: |
6224 次 |
| 最近记录: |