По некоторым причинам многопоточности, решение, упомянутое @HansPinckaers, было не для меня, но я нашел очень простой способ поймать прикосновение к кнопке «Назад», и я хочу закрепить это здесь на случай, если это может избежать часов обманов для кого-то еще.
Трюк действительно прост: просто добавьте прозрачную UIButton в качестве подпредставления к вашему UINavigationBar и установите для него селекторы, как если бы это была настоящая кнопка!
Вот пример, использующий Monotouch и C #, но перевод в target-c не должен быть слишком сложным для поиска.
public class Test : UIViewController {
public override void ViewDidLoad() {
UIButton b = new UIButton(new RectangleF(0, 0, 60, 44)); //width must be adapted to label contained in button
b.BackgroundColor = UIColor.Clear; //making the background invisible
b.Title = string.Empty; // and no need to write anything
b.TouchDown += delegate {
Console.WriteLine("caught!");
if (true) // check what you want here
NavigationController.PopViewControllerAnimated(true); // and then we pop if we want
};
NavigationController.NavigationBar.AddSubview(button); // insert the button to the nav bar
}
}
Интересный факт: в целях тестирования и для определения хороших размеров моей фальшивой кнопки я установил синий цвет фона ... И он показывает позади кнопку возврата! В любом случае, он по-прежнему ловит любое прикосновение, нацеленное на оригинальную кнопку.