我对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/

10-11 14:12