Как мне открыть UIAlertView, когда была нажата кнопка "Назад" UINavigationBar (контролируемая UINavigationController)? При определенных условиях я хочу спросить пользователя: "Вы уверены?" тип вопроса, чтобы он мог либо прервать действие, либо остаться в текущем представлении, либо поместить стек навигации и перейти к родительскому виду.
Самый привлекательный подход, который я нашел, - переопределить ShouldPopItem() в UINavigationBar Delegate.
Теперь здесь есть довольно похожий вопрос: iphone navigationController: дождитесь ответа uialertview перед выходом из текущего представления
Есть также несколько других вопросов подобного характера, например здесь: Проверьте, собирается ли UIViewController выходить из стека навигации? и Как сказать, когда кнопка возврата нажата в UINavigationControllerStack
Все эти состояния "подкласс UINavigationController" как можно более отвечают.
Тогда есть тот, который читает как подклассификация UINavigationController, как правило, не очень хорошая идея: Monotouch: UINavigationController, переопределить initWithRootViewController
apple docs также говорят, что UINavigationController не предназначен для подкласса.
Несколько других утверждают, что переопределение функции ShouldPopItem() невозможно даже при использовании UINavigationController, поскольку это не позволяет назначить UINavigationBarDelegate пользовательского/подкласса UINavigationBar.
Ни одна из моих попыток подкласса не работала, мой пользовательский делегат не был принят.
Я также где-то читал, что может быть возможно реализовать ShouldPopItem() в моем пользовательском UINavigationController, поскольку он присваивает себя как делегат своего UINavigationBar.
Не удивительно, что это не сработало. Как бы подкласс UINavigationController знал о методах, принадлежащих UINavigationBarDelegate. Он был отклонен: "подходящий метод не найден, чтобы переопределить". Удаление скомпилированного ключевого слова "override", но метод полностью игнорируется (как и ожидалось). Я думаю, что с Obj-C можно было бы реализовать несколько протоколов (аналогично интерфейсам в С# AFAIK), чтобы добиться этого. К сожалению, UINavigationBarDelegate не является интерфейсом, а классом в MonoTouch, поэтому это невозможно.
Я здесь очень потерялся. Как переопределить ShouldPopItem() в UINavigationBar Delegate, когда он контролируется UINavigationController? Или есть какой-либо другой способ всплывать UIAlertView и ждать его результата, прежде чем, возможно, вытащить стек навигации?