UITextView子类A的textViewDidChange在SecondVC中未触发求助
问题原因及排查方案
核心原因
你在SecondVC的textViewShouldChangeTextIn方法中返回false,这会直接阻止UITextView的文本内容发生实际变更。而textViewDidChange是只有当文本真正被修改后才会触发的代理方法,所以自然不会被调用。像textViewDidEndEditing这类属于生命周期事件的代理方法,和文本变更无关,因此不受影响。
排查与修复方向
- 先确认
textViewShouldChangeTextIn返回false的场景是否合理:如果是做输入限制(比如字数、字符类型),不要无条件返回false,应该仅在不符合输入规则的场景返回false,符合规则时返回true。比如限制最多输入10个字符,就判断当前文本长度加上输入字符长度是否超过阈值,超过才返回false。 - 检查自定义子类A的代理转发逻辑:确保
textViewDidChange的转发逻辑没有被遗漏或添加了不必要的拦截条件。比如子类A中是否存在“仅当文本实际变更时才转发”的判断,而因为文本没变化所以没触发转发? - 验证SecondVC中文本是否真的未变更:手动尝试修改文本后,打印UITextView的
text属性,确认内容确实没有改变,这能进一步佐证是textViewShouldChangeTextIn返回false导致的文本未变更。 - 如果业务需要在
textViewShouldChangeTextIn返回false时也触发类似textViewDidChange的逻辑,可以在返回false的分支里手动调用CustomTextViewDelegate对应的方法,比如customDelegate?.textViewDidChange(self)。
内容的提问来源于stack exchange,提问作者Reyhan muhammad
相关产品推荐
相关产品推荐

