我在iOS应用程序上工作,如果没有可用的互联网连接,我需要在每个uiviewcontroller中显示uiview,如在facebook messenger中,我编写以下代码来执行此操作:
extension UIViewController: NetworkStatusListener {
public func networkStatusDidChange(status: Reachability.NetworkStatus) {
switch status {
case .notReachable:
debugPrint("ViewController: Network became unreachable")
case .reachableViaWiFi:
debugPrint("ViewController: Network reachable through WiFi")
case .reachableViaWWAN:
debugPrint("ViewController: Network reachable through Cellular Data")
}
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 30))
let headerLbl = UILabel()
headerLbl.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 30)
headerLbl.text = "No Internet Connection!"
headerLbl.backgroundColor = UIColor.red
headerLbl.font = UIFont(name: "Cairo", size: 14)
headerLbl.textAlignment = .center
headerView.addSubview(headerLbl)
//
self.view.insertSubview(headerView, at: 0)
headerView.isHidden = (status == .notReachable)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
ReachabilityManager.shared.addListener(listener: self)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
ReachabilityManager.shared.removeListener(listener: self)
}
}
我依赖于检查this上的网络可用性 网络检查工作正常但未达到预期目标。 当没有互联网连接时,我不需要在项目的每个uiviewcontroller中出现网络连接,并且在所有其他视图之上没有重叠,除了它们之外或之外没有重叠,我该怎么办?
答案 0 :(得分:1)
我更喜欢像SwiftMessages这样的邮件扩展程序。您可以从任何类/功能e轻松调用该功能。 G。你的网络可用性功能。
在你的情况下,它看起来像这样:
public func networkStatusDidChange(status: Reachability.NetworkStatus) {
switch status {
case .notReachable:
debugPrint("ViewController: Network became unreachable")
let view = MessageView.viewFromNib(layout: .cardView)
view.configureTheme(.warning)
view.configureDropShadow()
view.configureContent(title: "Warning", body: "Network became unreachable.")
SwiftMessages.show(view: view)
case .reachableViaWiFi:
debugPrint("ViewController: Network reachable through WiFi")
case .reachableViaWWAN:
debugPrint("ViewController: Network reachable through Cellular Data")
}
}
对于tableviews,你可以使用这样的一些Pod:https://github.com/HamzaGhazouani/HGPlaceholders或https://github.com/dzenbot/DZNEmptyDataSet
答案 1 :(得分:1)
有几件事......
首先,在您的networkStatusDidChange
方法中,无论网络可用性状态如何,您每次都会创建一个新的headerView
。您可能希望a)仅在您想要显示时创建headerView
;和b)只有你还没有创建它。
其次,我非常确定在索引0处插入视图会将其置于底部。相反,您可能只是第一次addSubview
,然后当您想再次显示时,请在其上调用bringSubview(toFront:)
。
如果您要求每个VC能够显示状态消息的要求不是太严格,您可能需要考虑替代,我之所以提出这个原因,我不确定这种方法的效果如何创建其他视图/视图控制器 - 即当新视图被推送到导航控制器时状态消息会发生什么,或者用户在您的应用程序中选择另一个选项卡(我不知道您的应用程序,所以我只是提供实施例)。
如果您的应用程序有意义,您还可以创建一个专用的UIViewController
子类来显示状态(而不是任何视图控制器可以访问的扩展名)。然后,在您的应用中设置视图控制器层次结构 - 例如,如果您的应用是标签栏应用:
AppRootViewController
YourTabBarController
YourNetworkStatusViewController
网络状态vc可以根据需要添加/删除其视图,以响应网络可用性更改。优点是关注点分离 - 只有一个VC知道显示网络状态,而所有其他视图控制器都保持独立。