我想在没有网络连接时阻止应用的 UI。
我该怎么做?
创建阻塞宽屏透明视图
在需要时将其移动到前面以阻止 UI 触摸?
网络恢复时将其移动到后面?
在快速实施中是否有最好的用户体验实践?
与其执行所有这些操作,不如禁用该特定视图的用户交互。像下面一样
[self.view setUserInteractionEnabled:NO];
self.view.userInteractionEnabled = false //swift implementation
这将禁用该视图的所有子视图的用户交互
如果当前显示的视图控制器中没有处理互联网连接的代码
UIApplication.sharedApplication().keyWindow.rootViewController.view.userInteractionEnabled = false
这并不理想,但我有基于Nanayakkara项目的解决方案。AppDelegate 创建MyConnectionManager
networkStatusChanged
选择器上观察到:
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("networkStatusChanged:"), name: ReachabilityStatusChangedNotification, object: nil)
Reach().monitorReachabilityChanges()
每次更改连接状态时,经理都会呼叫networkStatusChanged
并检查连接是否丢失,顶部视图不是特殊的连接视图,并带有"请检查您的互联网连接"之类的消息。如果不是管理器从sharedApplication
中检索顶部控制器
func topController() -> UIViewController? {
if var topRootController =
UIApplication.sharedApplication().keyWindow?.rootViewController {
while((topRootController.presentedViewController) != nil) {
topRootController = topRootController.presentedViewController!
}
return topRootController
}
return nil
}
并用ConnectionViewController
调用presentViewController
.