需要在自定义 UITextField 中调用 shouldChangeCharactersInRange 并调用视图控制器函数通知更新
Posted
技术标签:
【中文标题】需要在自定义 UITextField 中调用 shouldChangeCharactersInRange 并调用视图控制器函数通知更新【英文标题】:Need to call shouldChangeCharactersInRange in custom UITextField AND call a view controller function notifying of update 【发布时间】:2014-01-06 16:57:01 【问题描述】:希望这很容易。
我有一个包含一堆字段的视图控制器,其中一些是自定义 UITextField。
我需要对某些文本字段(长度、允许的字符等)进行限制,我可以在使用 shouldChangeCharactrsInRange 函数时找到帮助。这涉及在初始化时将该字段设置为委托。
我还需要通知视图控制器该字段的更改,因为它将使用该字段中的值来重新计算其他字段。目前,我将视图控制器作为该领域的代表。但是这样我就不能定义自己的 shouldChangeCharactersInRange 函数了。
谁能帮我解决这个问题?
提前谢谢你。
【问题讨论】:
视图控制器不是对文本字段施加数据限制的对象吗?如果不是,那是什么对象? @Scott :当他使用他的自定义 UITextField 类时,我相信文本字段是它自己的代表。 【参考方案1】:您可以在 viewController 中实现shouldChangeCharactersInRange
,然后检查它是否被您的自定义UITextField
的实例调用。如果是,请调用您的 customClass 的特定 shouldChangeCharactersInRange
。
之后,由于您首先在控制器中,因此您可以重新计算其他字段。那行得通吗?
你应该在你的问题中添加一些代码,这样会更容易解释和帮助。
【讨论】:
我通过实现这一点并在字段上为 UIControlEventEditingChanged 事件添加事件侦听器实现了我所追求的目标。这将在字段被编辑时执行,只有当 shouldChangeCharactersInRange 函数返回 TRUE 时才为真。感谢您的帮助。【参考方案2】:您的shouldChangeCharactersInRange
可以有不同的代码,具体取决于您正在编辑的自定义文本字段。
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string
if (theTextField == textField1)
//do soemthing
else if()
//something different
//etc...
//Call self function to notify self that changetext was called
或者您可以将 viewController 设置为自定义文本字段中的弱类对象,并将文本字段设为自己的委托。然后在 shouldChangeCharactersInRange
函数中,您可以调用 viewcontroller 对象上的函数。这种方式比较混乱,不像 Apple 式的。
【讨论】:
以上是关于需要在自定义 UITextField 中调用 shouldChangeCharactersInRange 并调用视图控制器函数通知更新的主要内容,如果未能解决你的问题,请参考以下文章
在自定义 UlTableViewCell 中使用 UITextField 时 resignFirstResponder 崩溃
在自定义单元格(xib)中滚动时,UITextField 中的文本消失
如何在 XIB 中调用 UITextField 的委托方法?