我在链中有几个 api 调用函数,根据需要显示 PKHUD hud 窗口,hud 运行良好,但我无法在 viewWillDissapear 中隐藏 hud,为了更有意义,我有 profileViewController,它是 UINavigationController 的一部分,它嵌套在视图层次结构中的 tabBarcontroller 中,像这样.
在 profileVC 中,我有 3 个函数从 APIrequest 请求数据,每个函数都显示这样的 hud。
func loadData(){
routeClient.instance.getProfile(success: {[weak self] data in
guard let self = self else {return}
do{
let response = try JSONDecoder().decode(profile.self,
if requestManager.instance.user.findHouse! == 0{
PKHUD.sharedHUD.contentView = PKHUDProgressView(title: "title", subtitle: "Subtitle")
PKHUD.sharedHUD.show()
self.loadHouse()
}else{
PKHUD.sharedHUD.contentView = PKHUDProgressView (title: "tittle", subtitle: "subtitle")
PKHUD.sharedHUD.show()
self.loadAnnounce()
}
}
}catch{
print("error ocurrec in decoder \(error.localizedDescription)")
}
}, failure: {error in
print("error in data load \(error.localizedDescription)")
})
}
然后在 loadHouse 和 load 通知函数中使用不同的消息。
func loadHouse(){
routeClient.instance.getHouseByprofile(success:{[weak self] data in
guard let self = self else {return}
PKHUD.sharedHUD.contentView = PKHUDProgressView(title: "Procesando infromacion", subtitle: "")
PKHUD.sharedHUD.show()
if requestManager.instance.user.findHouse == 0{
do{
let response = try JSONDecoder().decode(houseModel.self, from: data)
if response.id != nil {
self.house = response
PKHUD.sharedHUD.contentView = PKHUDSuccessView(title: "title", subtitle: "")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}else{
print("the is is nil")
PKHUD.sharedHUD.contentView = PKHUDTextView(text: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}
}catch{
print("error en la decodificacion \(error.localizedDescription)")
PKHUD.sharedHUD.contentView = PKHUDErrorView(title: "title,", subtitle: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}
}else{
do{
let response = try JSONDecoder().decode(houseResponse.self, from: data)
PKHUD.sharedHUD.contentView = PKHUDErrorView(title: "title", subtitle: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}catch{
PKHUD.sharedHUD.contentView = PKHUDErrorView(title: "title,", subtitle: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
}
self.tableview.reloadData()
}
}, failure: {[weak self] error in
guard let self = self else {return}
print(error.localizedDescription)
self.tableview.reloadData()
})
}
func loadAnnounce(){
routeClient.instance.getAnnounceByProfile(success: {[weak self] data in
guard let self = self else {return}
do{
let json = try JSONDecoder().decode(getAnnounceResponse.self, from: data)
PKHUD.sharedHUD.hide()
if json.success!{
requestManager.instance.announce = (json.data?.count)! > 0 ? json.data![0] : nil
self.tableview.reloadData()
}
}catch{
PKHUD.sharedHUD.hide()
print(error.localizedDescription)
}
}, failure: {error in
PKHUD.sharedHUD.hide()
print(error.localizedDescription)
})
}
一切正常,事情是 ii 更改 tabbarcontroller 中的选项卡,并且 hud 尚未显示在 profileVC 中,然后加载为 profileVC 是呈现的 viewController。我试图隐藏 HUD 的内容如下。
override func viewWillDisappear(_ animated: Bool) {
//PKHUD.sharedHUD.hide()
print("va a desaparecer")
PKHUD.sharedHUD.hide()
NotificationCenter.default.removeObserver(self, name: .didchangeTab, object: nil)
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
//self.navigationController?.navigationBar.barTintColor = .clear//UIColor.init(red: 106/255, green: 172/255, blue: 82/255, alpha: 1)
}
override func viewDidDisappear(_ animated: Bool) {
PKHUD.sharedHUD.hide()
}
但没有一个工作,当tabBarController更改标签栏项目但即使hud也没有隐藏时,还向观察者添加了一个通知,这只发生在第一次加载profileVC并且HUD现在还显示时,所以如果用户点击下一个标签栏项目,然后加载其他视图控制器,然后显示 HUD。我还检查内存泄漏但没有胶水为什么即使在执行 viewWillDissappear 时视图控制器也没有从内存中解除分配。