我对Swift和iOS开发还不熟悉。我一直在尝试创建应用程序范围内的internet连接检查,允许用户重试(重新加载当前视图)。下面的checkInternetConnection()
函数在我的viewWillAppear()
类中的BaseUIViewController
期间调用。
连接检查工作正常。但到目前为止,在用户按下警报中的“重试”按钮后,我还无法找到重新加载当前视图的方法。实际上,我还没有找到在任何场景中重新加载当前视图的方法。
我知道我在下面的尝试中做错了一件事(因为有一个编译错误告诉我这样做),那就是我在这一行传递一个Reachability.isConnectedToNetwork()
对象作为参数,而不是一个UIViewController
,但我怀疑这不是我唯一的错误。
func checkInternetConnection() {
if (Reachability.isConnectedToNetwork()) {
print("Internet connection OK")
} else {
print("Internet connection FAILED")
let alert = UIAlertController(title: NSLocalizedString("Error!", comment: "Connect: error"), message: NSLocalizedString("Could not connect", comment: "Connect: error message"), preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: NSLocalizedString("Retry", comment: "Connect: retry"), style: .Default, handler: { action in
print("Connection: Retrying")
let navigationController = UIApplication.sharedApplication().windows[0].rootViewController as! UINavigationController
let activeViewController: UIViewController = navigationController.visibleViewController!
self.performSegueWithIdentifier(activeViewController, sender:self)
}))
self.presentViewController(alert, animated: true, completion: nil)
}
}
最佳答案
BaseUIViewController
可以执行应用程序范围的连接检查,因此您的所有ViewControllers都将从BaseUIViewController
继承。
在连接检查之后,每个ViewController将有不同的行为。
您可以做的一件事是,在BaseUIViewController
中定义一个块,该块在连接检查失败后执行操作。
下面是一个例子:
class BaseViewUIController: UIViewController {
var connectivityBlock: (() -> Void)?
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
checkInternetConnection()
}
func checkInternetConnection() {
if Reachability.isConnectedToNetwork() {
print("Internet connection OK")
} else {
if let b = connectivityBlock {
b()
}
}
}
}
在继承的ViewControllers中:
class MyViewController: BaseUIViewController {
override func viewDidLoad() {
super.viewDidLoad()
connectivityBlock = {
print("Do View Refresh Here.")
}
}
}
然后在签入
BaseUIViewController
之后,将执行connectivityBlock
中的代码,以便每个VC可以对其进行不同的处理。您还可以在
BaseUIViewController
中定义一个函数,并且每个子类将重写该函数,在连接检查失败后,调用该函数。关于ios - 在Swift 2.3中从UIAlertView导航到UIViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40736488/