我有一个更新功能,当按下我的应用程序中的刷新按钮时会调用该功能。 在更新函数中,我调用一些其他函数来获取新数据,然后使用新值设置所有文本字段。只要函数没有完全执行,我想显示一个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执行此任务是否有干净的方法?
答案 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和回调方法,因为我认为委托模式不适合这里。
通知方法可能如下所示:
NotificationCenter
方法创建通知。类似的东西:
post
func fetchData() {
// Code that fetches the new data...
// Create the notification
NotificationCenter.default.post(name: "NewDataReceived", object: self)
}
中,您希望在启动控制器时添加观察者。类似的东西:
UIViewController
当您的获取数据操作发布通知时,系统会通知您required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Create the observer
NotificationCenter.default.addObserver(self, #selector(dismissAlertView), name: "NewDataReceived", object: nil)
}
,并会调用您在观察者中指明的方法。
您可以在此方法中解除UIViewController
。
类似的东西:
UIAlertController
这将要求您的UIAlertController是UIViewController的实例属性。
上面的代码只是为了说明你可以采用的方法。我建议参考NotificationCenter的文档。
https://developer.apple.com/reference/foundation/nsnotificationcenter
以下是回调方法的样子:
类似的东西:
// Also in your UIViewController...
func dismissAlertView() {
refreshAlert.dismiss(animated: true, completion: nil)
}
类似的东西:
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/