自定义NavigationBarButton在iOS 12及更低版本上没有控制器,iOS 13正常运行

时间:2019-10-24 06:08:51

标签: ios swift controller uikit navigationbar

我正在尝试将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的效果很好)。

0 个答案:

没有答案