【问题标题】:Swift: Reload a View ControllerSwift:重新加载视图控制器
【发布时间】:2015-09-21 08:28:21
【问题描述】:

点击某个按钮时,我需要刷新view controller。简单地激活viewDidLoad() 似乎并不能满足我的需要。但是,当我离开 view controller 然后再回来时,它似乎工作得很好?

如何刷新/重新加载view controller,就好像我已经离开它然后又回到它而不实际离开它?

【问题讨论】:

标签: ios swift refresh viewcontroller


【解决方案1】:

斯威夫特 5.2

only 我发现在按钮可见性发生变化的情况下动态刷新视图的方法是:-

viewWillAppear(true)

这可能是一种不好的做法,但希望有人会发表评论。

【讨论】:

    【解决方案2】:

    如果您需要在某些更改后通过重绘视图来更新画布,则应调用 setNeedsDisplay。

    感谢@Vincent 之前的评论。

    【讨论】:

      【解决方案3】:

      View Life Cycle

      每次打开视图时它都会加载ViewWillAppear。上面是图片View Controller Lifecycle的链接。

      viewWillAppear()——在视图控制器的内容视图被添加到应用程序的视图层次结构之前调用。使用此方法触发在内容视图显示在屏幕上之前需要发生的任何操作。尽管有这个名字,只是因为系统调用了这个方法,它并不能保证内容视图会变得可见。该视图可能被其他视图遮挡或隐藏。这个方法只是表明内容视图即将被添加到应用程序的视图层次结构中。

      https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/WorkWithViewControllers.html

      【讨论】:

        【解决方案4】:

        如果您使用的是导航控制器,您可以再次选择当前的 UIViewController,它会被刷新。

        【讨论】:

        • 这是在视图控制器内的按钮点击上强制刷新视图控制器的正确答案。
        • 迄今为止最好的答案!
        【解决方案5】:

        无论您在viewDidLoad 中编写什么代码,都将其添加到viewWillappear()。这将解决您的问题。

        【讨论】:

        • 仅当您离开视图控制器并返回到它时。但是如果你想在点击按钮时刷新视图控制器,这是行不通的。
        • 此外,每次显示视图时都会重新加载数据,即使没有必要。
        • 取决于您的导航层次结构。如果您关闭非全屏模式,将不会调用 willWillAppear。
        【解决方案6】:

        在 Swift 4 中:

        self.view.layoutIfNeeded()
        

        【讨论】:

          【解决方案7】:

          这可能有点晚了,但你有没有试过打电话给loadView()

          【讨论】:

          • public func loadView() // 如果不使用 nib,子类应该在此处创建自定义视图层次结构。 永远不应直接调用。 moreHere
          • 我不认为他是说直接调用它。他说要在那里添加代码。
          【解决方案8】:

          你不应该手动调用 viewDidLoad 方法, 相反,如果你想重新加载任何数据或任何 UI,你可以使用这个:

          override func viewDidLoad() {
              super.viewDidLoad();
          
              let myButton = UIButton()
          
              // When user touch myButton, we're going to call loadData method
              myButton.addTarget(self, action: #selector(self.loadData), forControlEvents: .TouchUpInside)
          
              // Load the data
              self.loadData();
          }
          
          func loadData() {
              // code to load data from network, and refresh the interface
              tableView.reloadData()
          }
          

          每当你想重新加载数据并刷新界面时,都可以调用self.loadData()

          【讨论】:

          • 这部分实际刷新界面部分是怎么做的?
          • 当你想重新加载时,再次调用loadData从模型中获取数据。在 tableView 调用 reloadData() 或常规视图 setNeedsDisplay。
          • // 如果子类不使用 nib,则应在此处创建自定义视图层次结构。永远不应该直接调用。
          猜你喜欢
          • 2016-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-18
          • 2012-10-08
          • 1970-01-01
          相关资源
          最近更新 更多