自定义UITableViewCell中UITextView的isEditable属性设置不生效问题
这种现象核心原因是NIB加载的属性赋值时机优先级+UITableViewCell复用流程的特性,具体拆解如下:
NIB配置的属性覆盖问题
如果你在NIB文件中默认勾选了UITextView的「Editable」选项(即isEditable = true),系统会在NIB加载的后期阶段,将归档的属性值应用到textView上。如果你的代码设置时机早于这个阶段(比如Cell的初始化方法、未调用super.awakeFromNib()就设置),你的isEditable = false会被NIB的配置覆盖。而tintColor、富文本等属性在NIB中没有显式设置,所以你的代码设置不会被覆盖,能正常生效。Cell复用的状态残留
当UITableView复用Cell时,若之前的Cell因某些场景被临时设置为isEditable = true,且你没有在复用流程中重置该属性,就会出现状态残留。而tableView(_:cellForRowAt:)是Cell即将显示前的最后一个关键节点,在此处设置属性可以确保无论Cell是新创建还是复用,属性都会被强制重置,不会被后续流程覆盖。awakeFromNib的调用顺序问题
如果你的awakeFromNib方法没有先调用super.awakeFromNib(),父类的NIB属性处理逻辑会在你的设置之后执行,同样会覆盖你设置的isEditable值。正确的写法应该是:override func awakeFromNib() { super.awakeFromNib() self.textView.isEditable = false }
验证建议
打开你的NIB文件,直接将UITextView的「Editable」选项取消勾选,此时即使不在代码中设置,运行时textView也会保持不可编辑状态,这就能确认是NIB配置覆盖了代码设置的问题。
内容的提问来源于stack exchange,提问作者Blaire Crits-Christoph

