需要在自定义 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 崩溃

在自定义单元格中聚焦 UITextfield

在自定义单元格(xib)中滚动时,UITextField 中的文本消失

如何在 XIB 中调用 UITextField 的委托方法?

在自定义 UITableViewCell UITextField 中输入的值转换为其他字段

iOS - 在自定义 UITableViewCell 中为 UITextField 添加目标/操作