UITextView 设置为空,返回 UIViewController 时不会更新

Posted

技术标签:

【中文标题】UITextView 设置为空,返回 UIViewController 时不会更新【英文标题】:UITextView is set to empty and doesn't get updated when coming back to UIViewController 【发布时间】:2019-03-07 08:26:46 【问题描述】:

假设我有两个 UIViewController:view1view2

view1 是 TabBarController 的第一个(主)viewController,并且有一个按钮 B1 可以触发到 view2 的转换。我在 view1 中有一个 UITextView(称为 textView),它使用以下代码进行了多次更新:

DispatchQueue.main.async 
 self.textView.text = self.textView.text + "some value"

当我使用按钮 B1 转到 view2 时,view1 的后台进程仍在运行,它们会尝试更新 textView 使用上面的代码,但是我们在 view2 中并且文本更新不能发生。结果,当我回到 view1 时,textview 变为空且不再更新。关于如何解决这个问题的任何建议?

换句话说,一些网络通信在 view1 中频繁运行,它们会更新 textview。只要我在 view1 中,它就可以工作。但是当我转到第二个 viewController (view2) 并返回到 view1(使用 Segue)时,textview 变为空并且永远不会更新,即使我在 view2 中之前的后台进程正在运行并尝试更新文本(所以我的问题是他们正在尝试更新 textView 的第一个对象和不是第二个,我猜?)

【问题讨论】:

textView的代码更新,从哪里更新文本视图。 【参考方案1】:

viewWillAppear中添加由上述代码组成的方法或上述代码本身 view1(VC)的方法

override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        DispatchQueue.main.async 
            self.textView.text = self.textView.text + "some value"
        
    

func someMethod() 
        DispatchQueue.main.async 
            self.textView.text = self.textView.text + "some value"
        
    
    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        someMethod()
    

【讨论】:

以上是关于UITextView 设置为空,返回 UIViewController 时不会更新的主要内容,如果未能解决你的问题,请参考以下文章

NSKeyedArchiver 为 UIView 的子视图返回 nil

从 UIView 中的 UITextView 复制文本后,UITextView 更改为 UIWebDocumentView?

iPad 上带有 UITextView 的 InputAccessoryView

自动调整包含 UITextView 的 UIView

您如何将 UITextView 居中作为 UIView 的子视图?

在 UIView 上缩放 UITextView 的字体大小