【问题标题】:Is there a way of reloading a View Controller upon completion of a function using Swift 5?有没有办法在使用 Swift 5 完成功能后重新加载视图控制器?
【发布时间】:2021-07-22 05:37:45
【问题描述】:

我在视图控制器中使用以下语法(使用情节提要)来删除数据库中数组的第二个元素。

@IBAction func deleteItemOne(_ sender: UIButton) {

if userId == user?.uid {
                        
  let group_array = document["product"] as? [String] ?? [""]
                        
    if  (group_array.count) > 1 {
            
      document.reference.updateData([
          "product": FieldValue.arrayRemove([group_array[1]])
      ])
                            self.viewDidLoad()
                            self.viewWillAppear(true)
         }
     }
}

删除数组元素后,我使用以下语法重新加载视图控制器

self.viewDidLoad() 
self.viewWillAppear(true) 

然而,在移除元素后,视图控制器并没有按预期重新加载,事实上它并没有做任何事情。

这引出了我的问题,是否有一个简单的 Swift 函数/方法可以在完成时调用以重新加载视图控制器?

【问题讨论】:

  • 永远不要自己调用包含willdidshould 的委托方法。它们由框架专门调用。在 arrayRemove 行之后重新加载闭包内的(表)视图。

标签: ios swift viewcontroller


【解决方案1】:

您不应该直接调用 viewDidLoad 或 viewWillAppear。系统调用这些方法(并且 viewDidLoad 在视图控制器的生命周期内只被调用一次。)

您应该将代码分解为具有displayContents() 方法(或类似方法)。当您需要显示内容时调用它,无论是最初还是内容发生变化时。

【讨论】:

  • displayContents() 方法是 Swift 方法吗?我刚刚查了这个方法,在 Apple Developer 网站上它说你不应该直接调用 display 方法?
  • 不,我是说你应该定义你自己的方法,displayContents(),它用数据填充你的视图控制器。您应该在视图控制器的数据首次可用时调用它,然后在您有新数据要显示时调用它。
  • 如果你不喜欢前缀“display”,showData()怎么样
猜你喜欢
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2012-07-18
  • 2021-09-30
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多