只要一个函数持续显示UIAlertController

时间:2016-11-19 19:59:11

标签: ios swift uialertcontroller

我有一个更新功能,当按下我的应用程序中的刷新按钮时会调用该功能。 在更新函数中,我调用一些其他函数来获取新数据,然后使用新值设置所有文本字段。只要函数没有完全执行,我想显示一个UIAlertController,向用户显示一个Alert Popup。 UIAlertController的代码如下所示:

@IBAction func btnReloadDataTapped(_ sender: AnyObject) {
     let refreshAlert = UIAlertController(title: "Refreshing Data", message: "This might take a few moments.", preferredStyle: UIAlertControllerStyle.alert)

     present(refreshAlert, animated: true, completion: nil)
}

使用Swift 3执行此任务是否有干净的方法?

2 个答案:

答案 0 :(得分:1)

完成所有任务后,在你的UIVIewController中调用

self.dismiss(animated: true, completion: nil)

答案 1 :(得分:0)

我使用struct timespec ts; sem_t sema; sem_init(&sema, 0, 0) int ret; if ( -1 != (ret = clock_gettime(CLOCK_REALTIME, &ts))){ ts.tv_sec += 1; return sem_timedwait(sema, &ts); } 课程来处理类似的情况。您也可以使用回调或委托来解决这个问题。

我将仅讨论下面的NotificationCenter和回调方法,因为我认为委托模式不适合这里。

通知方法可能如下所示:

  1. 在负责获取新数据的类/结构中,您需要使用NotificationCenter的NotificationCenter方法创建通知。
  2. 类似的东西:

    post
    1. 然后在具有重新加载按钮的func fetchData() { // Code that fetches the new data... // Create the notification NotificationCenter.default.post(name: "NewDataReceived", object: self) } 中,您希望在启动控制器时添加观察者。
    2. 类似的东西:

      UIViewController
      1. 当您的获取数据操作发布通知时,系统会通知您required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) // Create the observer NotificationCenter.default.addObserver(self, #selector(dismissAlertView), name: "NewDataReceived", object: nil) } ,并会调用您在观察者中指明的方法。

      2. 您可以在此方法中解除UIViewController

      3. 类似的东西:

        UIAlertController

        这将要求您的UIAlertController是UIViewController的实例属性。

        上面的代码只是为了说明你可以采用的方法。我建议参考NotificationCenter的文档。

        https://developer.apple.com/reference/foundation/nsnotificationcenter

        以下是回调方法的样子:

        1. 更改负责获取数据的方法的签名以获取功能。
        2. 类似的东西:

          // Also in your UIViewController...
          func dismissAlertView() {
              refreshAlert.dismiss(animated: true, completion: nil)
          }
          
          1. 处理UIViewController中的回调
          2. 类似的东西:

            func fetchData(completionHandler: () -> Void) {
                // Code that fetches the new data...
            
                // Call the completion handler
                completionHandler()
            }
            

            同样,这仅用于说明目的。您可以在此处详细了解回调:https://www.andrewcbancroft.com/2016/02/15/fundamentals-of-callbacks-for-swift-developers/