我正在尝试将CustomView及其自己的ViewController用作正确的NavigationBar(barbuttonitem)。此视图需要根据应用程序状态进行更新。视图是这样实现的:
private func addUploadStatusToNavigationController() {
cloudView = UploadStatusViewController<UploadStatusNavigationView>()
let tgr = UITapGestureRecognizer(target: self, action: #selector(cloudViewTapped))
cloudView.customView.addGestureRecognizer(tgr)
let cloudViewButton = UIBarButtonItem(customView: cloudView.customView)
self.navigationItem.rightBarButtonItem = cloudViewButton
cloudView.setStatus(status: uploadStatusService.getStatus())
if let btn = self.navigationItem.rightBarButtonItem?.customView {
btn.frame = CGRect(x: 0, y: 0, width: (self.navigationController?.navigationBar.frame.width ?? 0) * 0.6, height: 44)
}
uploadStatusService.delegate = self
}
在viewWillAppear中调用此方法。
在iOS 13上一切正常,直到我通过点击视图选项卡打开警报。如果再次关闭它,则视图将丢失其自己的控制器-UploadStatusViewController-(至少在ViewDebugger中)。通过此控制器运行的状态更新仍然可以正常工作。点击不再被识别。
在iOS 12中,未检测到任何轻敲,甚至没有检测到轻敲。
呈现警报如下:
private func askUserToStop() {
let alert = UIAlertController(title: "OneDrive", message: "BackupPopup.Cancel.Message".localized, preferredStyle: .alert)
let action1 = UIAlertAction(title: "Button_Title_Cancel".localized, style: .cancel, handler: nil)
alert.addAction(action1)
self.present(alert, animated: true, completion: nil)
}
如果我将新的控制器推到NavigationStack上并再次导航回去,则GestureRecognizer只能再次运行(iOS13)。 实际上,我希望TapGestureRecognizer可以保留在弹出窗口之外,并且可以在iOS 12下使用。
恐怕我不知道还能尝试什么。
编辑:
总结:
iOS 12:点击时不执行任何操作,ViewDebugger中的View后面没有UploadStatusViewController
iOS 13:仅在第一次点击时执行操作,第一次点击后,UploadStatusViewController将在ViewDebugger中删除。
iOS 12和13:UploadStatusViewController的其他操作(如更新其customView的效果很好)。