重新加载ViewController

Tia*_*oso 38 uiviewcontroller ios

我有一个View控制器显示一些信息(不是表视图).

我有一个远程服务器的更新调用,它填充了我的数据库.我想在更新调用完成后完全重新加载我的ViewController.

我该怎么办?

Moa*_*eed 23

如果你知道你的数据库已经更新,你想只刷新viewcontrolle(这也是我的情况).我没有找到任何其他的解决方案,但我做的是当我的数据库更新我打电话

[self viewDidLoad];

再次,它工作.请记住,如果您覆盖其他viewWillAppear或loadView,则以相同的顺序调用它们.喜欢.

[self viewDidLoad]; [self viewWillAppear:YES];

但我认为应该有一个更具体的解决方案,如浏览器中的刷新按钮.如果有人有plz上传anse


Rui*_*res 12

你真的不需要这样做:

[self.view setNeedsDisplay];
Run Code Online (Sandbox Code Playgroud)

老实说,在这种情况下,我认为这是"让最好的"解决方案的希望.有几种方法可以更新你的UIViews:

  1. KVO
  2. 通知
  3. 代表团

每个人都有利有弊.根据您要更新的内容以及业务层(服务器连接)与业务层之间的"连接"类型UIViewController,我可以根据您的需求推荐一个.

  • 这个答案并没有真正回答这个问题.您建议使用3种方法重新加载视图,但是您没有详细说明甚至提供有关如何实现任何这些建议的信息的链接. (105认同)

jua*_*lla 11

如果要重新加载最初从XIB加载的ViewController,可以使用下一个UIViewController扩展:

extension UIViewController {
    func reloadViewFromNib() {
        let parent = view.superview
        view.removeFromSuperview()
        view = nil
        parent?.addSubview(view) // This line causes the view to be reloaded 
    }
}
Run Code Online (Sandbox Code Playgroud)


Pat*_*gar 5

试试这个,您必须调用这两种方法来重新加载视图,因为这对我有用,

-客观-C

[self viewDidLoad]; 
[self viewWillAppear:YES];
Run Code Online (Sandbox Code Playgroud)

-迅速

self.viewDidLoad()
self.viewWillAppear(true)
Run Code Online (Sandbox Code Playgroud)

  • 这不是正确的答案。当您调用viewDidLoad进行重新加载视图时,应用程序的内存将增加。这不是正确的答案。 (2认同)
  • 完全不建议调用控制器生命周期方法 (2认同)