Пользовательский NavigationBarButton не имеет контроллера на iOS 12 и ниже, iOS 13 работает - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь использовать CustomView с собственным ViewController как правую панель навигации (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:Никаких действий при нажатии, нет UploadStatusViewController за View в ViewDebugger

  • iOS 13: Действие только при первом нажатии, UploadStatusViewController удаляется в ViewDebugger после первого нажатия.

  • iOS 12 и 13: другие действия из UploadStatusViewController, такие как обновление его customView, работают нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...