https://github.com/onegray/UIViewController-BackButtonHandler/blob/master/UIViewController%2BBackButtonHandler.m

ткрыть UIAlertView, когда была нажата кнопка «Назад» на панели UINavigationBar (контролируемой UINavigationController)? При определенных условиях я хочу спросить пользователя «Вы уверены?» тип вопроса, чтобы он мог либо прервать действие и остаться в текущем представлении, либо открыть стек навигации и перейти к родительскому представлению.

Самый привлекательный подход, который я нашел, состоял в том, чтобы переопределить ShouldPopItem () в Делегате UINavigationBar.

Теперь есть довольно похожий вопрос здесь:iphone navigationController: дождитесь ответа uialertview, прежде чем выйти из текущего представления

Есть также несколько других вопросов аналогичного характера, например, здесь:Проверка, собирается ли UIViewController получить Popped из стека навигации? а такжеКак сказать, когда кнопка назад нажата в UINavigationControllerStack

Все эти состояния "подкласс UINavigationController" в качестве возможных ответов.

Тогда есть этот, который читается как подкласс UINavigationController, как правило, не очень хорошая идея:Monotouch: UINavigationController, переопределить initWithRootViewController

яблочные документы также скажем, что UINavigationController не предназначен для использования в подклассах.

Несколько других утверждают, что переопределение ShouldPopItem () даже невозможно при использовании UINavigationController, поскольку это не позволяет назначать пользовательский / подклассный UINavigationBarDelegate для UINavigationBar.

Ни одна из моих попыток создания подкласса не сработала, мой пользовательский Делегат не был принят.

Я также где-то читал, что в моем пользовательском UINavigationController может быть возможно реализовать ShouldPopItem (), поскольку он назначает себя делегатом своей UINavigationBar.

Не удивительно, это не сработало. Как подкласс UINavigationController узнает о методах, принадлежащих UINavigationBarDelegate. Было отклонено: «не найдено подходящего метода для переопределения». Удаление ключевого слова override скомпилировано, но метод полностью игнорируется (как и ожидалось). Я думаю, что с Obj-C можно реализовать несколько протоколов (аналогично интерфейсам в C # AFAIK) для достижения этой цели. К сожалению, UINavigationBarDelegate - это не интерфейс, а класс в MonoTouch, так что это кажется невозможным.

Я в значительной степени потерян здесь. Как переопределить mustPopItem () в делегате UINavigationBar, когда он контролируется UINavigationController? Или есть какой-то другой способ вызвать UIAlertView и дождаться его результата, прежде чем, возможно, получить доступ к стеку навигации?

Ответы на вопрос(5)

Ваш ответ на вопрос