Я пытаюсь использовать 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, работают нормально.