UINavigationBarDelegate
, вероятно, ближе всего вы можете определить, была ли нажата кнопка, если вы обрабатываете сообщение – navigationBar:didPopItem:
.
Это будет вызвано либо при нажатии кнопки «Назад», либо когда ваш код выскочит из самого стека навигационного контроллера. Если ваш код выводит представления вручную, тогда достаточно просто установить флаг, указывающий, когда ваш код инициировал всплывающее окно, и, следовательно, вы можете определить, когда была нажата кнопка «Назад»
В вашей реализации UINavigationBarDelegate создайте логическое свойство, например poppedInCode
, для которого вы установите значение true перед тем, как ваш код выполнит всплывающее окно, и реализуйте делегат, например:
- (void) navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
{
if (!self.poppedInCode) {
// back button was tapped
}
// set to false ready for the next pop
self.poppedInCode = FALSE;
}
Это имеет преимущество перед принятым в настоящее время ответом, заключающееся в том, что он не требует создания подклассов компонентов, согласно документации Apple, что вы не должны создавать подклассы. Он также сохраняет все поведение встроенной кнопки «назад» без необходимости ее перезаписи.