【问题标题】:Should "Editing Changed" be fired if I return NO from textField:shouldChangeCharactersInRange:replacementString?如果我从 textField:shouldChangeCharactersInRange:replacementString 返回 NO,是否应该触发“Editing Changed”?
【发布时间】:2013-02-13 12:45:12
【问题描述】:

我正在实现 UITextFieldDelegate 的方法 textField:shouldChangeCharactersInRange:replacementString 并返回“NO”,因为我正在格式化输入的文本(作为货币)并将其保存回 UITextField 的文本属性。

但我在与 IBAction 相关联的文本字段上也有“编辑更改”事件。如果我返回 NO,则不会调用此操作。当我返回 YES 时调用它,但这最终会使我的文本字段中的所有字母加倍!

  1. 这是正确的行为吗?我找不到权威人士说是这种情况。如果您可以通过指向 Apple 文档的链接来回答,那将会很有帮助。

  2. 有没有办法在我的 textField:shouldChangeCharactersInRange... 方法结束时“手动”触发此事件? (我无权从我的委托的实现中访问我的 IBAction 所定义的类。)

【问题讨论】:

  • 1.好吧,我试过了,没有加倍的字符? 2.在shouldchangecharactersinrange里面调用[self editing changed:yourtextfield]这样的方法?
  • 根据UITextField 协议参考每当用户在文本字段中键入新字符或删除时,文本字段都会调用此方法,即textField:shouldChangeCharactersInRange:replacementString一个现有的字符。
  • 字符加倍是因为在委托方法中我自己在文本字段内容上调用 stringByReplacingCharactersInRange:withString: ,所以我在重新格式化整个内容之前收到用户输入的更改。如果我返回 YES,Cocoa 会很有帮助地再次添加它们。
  • BlackFlam3 对,这正在发生,问题是当我返回 NO 时,Editing Changed 事件没有被触发,我的代码的另一部分需要知道发生了什么事。

标签: objective-c delegates uitextfield uitextfielddelegate


【解决方案1】:

在我实现 textField:shouldChangeCharactersInRange:replacementString(在 UITextField 上的类别中声明)结束时,我需要发送:

[self sendActionsForControlEvents:UIControlEventEditingChanged];

这个“手动”触发事件在响应者链上,否则会通过返回 NO 来抑制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2013-02-01
    • 2011-03-26
    • 2019-10-01
    相关资源
    最近更新 更多