Установка действия для кнопки "Назад" в контроллере навигации

Статические методы не являются методами экземпляра. Нет никакого контекста экземпляра, поэтому для реализации его от интерфейса имеет мало смысла.

177
задан TheNeil 15 May 2019 в 15:42
поделиться

7 ответов

Используя переменные target и action, для которых вы в данный момент оставляете значение «nil», вы должны иметь возможность подключать свои диалоговые окна сохранения, чтобы они вызывались, когда кнопка «выбрана». Осторожно, это может сработать в странные моменты.

Я в основном согласен с Amagrammer, но не думаю, что будет так сложно сделать кнопку со стрелкой на заказ. Я бы просто переименовал кнопку «Назад», сделал снимок экрана, фотошоп с нужным размером кнопки и сделал бы это изображение в верхней части кнопки.

1
ответ дан 23 November 2019 в 20:17
поделиться

Я не верю, что это возможно, легко. Я считаю, что единственный способ обойти это - создать собственное изображение стрелки кнопки «Назад» и разместить его там. Поначалу это меня расстраивало, но я понимаю, почему, ради последовательности, это было опущено.

Вы можете приблизиться (без стрелки), создав обычную кнопку и скрыв кнопку возврата по умолчанию:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Servers" style:UIBarButtonItemStyleDone target:nil action:nil] autorelease];
self.navigationItem.hidesBackButton = YES;
2
ответ дан 23 November 2019 в 20:17
поделиться

В отличие от Амаграммера, это возможно. Вы должны создать подкласс своего navigationController . Я объяснил все здесь (включая пример кода).

42
ответ дан 23 November 2019 в 20:17
поделиться

Вы можете попробовать получить доступ к элементу правой кнопки NavigationBars и установить его свойство селектора ... вот ссылка Ссылка на UIBarButtonItem , еще одна вещь, если эта проделанная работа, которая будет работать, будет , установите для элемента правой кнопки панели навигации пользовательский элемент UIBarButtonItem, который вы создаете, и установите его селектор ... надеюсь, это поможет

1
ответ дан 23 November 2019 в 20:17
поделиться

Сделать напрямую невозможно. Есть пара альтернатив:

  1. Создайте свой собственный UIBarButtonItem , который проверяется при нажатии и всплывает, если тест пройден.
  2. Проверить содержимое поля формы с помощью метода делегата UITextField , например -textFieldShouldReturn: , который вызывается после нажатия кнопки Return или Done на клавиатуре

Обратной стороной первого варианта является то, что Стиль кнопки «Назад» с левой стрелкой недоступен с помощью настраиваемой кнопки панели. Поэтому вам нужно использовать изображение или кнопку обычного стиля.

Второй вариант хорош, потому что вы получаете текстовое поле обратно в методе делегата, поэтому вы можете настроить логику проверки на конкретное текстовое поле, отправленное методу обратного вызова делегата.

5
ответ дан 23 November 2019 в 20:17
поделиться

Эта техника позволяет изменить текст кнопки "назад", не затрагивая заголовок ни одного из контроллеров представления и не наблюдая изменения текста кнопки "назад" во время анимации.

Добавьте это в метод init в вызывающем контроллере представления:

UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];   
temporaryBarButtonItem.title = @"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];
3
ответ дан 23 November 2019 в 20:17
поделиться

Попробуйте поместить это в контроллер представления, где вы хотите обнаруживать нажатие:

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
       // back button was pressed.  We know this is true because self is no longer
       // in the navigation stack.  
    }
    [super viewWillDisappear:animated];
}
363
ответ дан 23 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: