Предотвратить анимацию при нажимании кнопки “Back” в панели навигации?

Мое приложение имеет контроллер навигации, и я не хочу анимации в нем:

  • для предотвращения анимации при продвижении представления это легко через pushViewController:animated: метод

  • но когда я нажимаю "заднюю" кнопку на этом подпредставлении, существует анимация! KO! Что я могу сделать для предотвращения этой анимации?

16
задан Dirty Henry 25 June 2010 в 15:59
поделиться

2 ответа

Не то, чтобы вам следовало, однако вы можете переопределить стандартное поведение, создав собственный leftBarButtonItem в вашем viewController.

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)];
[[self navigationItem] setLeftBarButtonItem:item];
[item release];

- (void)backButtonPressed
{
    [[self navigationContoller] popViewControllerAnimated:NO];
}

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

Помните, что приложения, не соответствующие правилам интерфейса iPhone, не будут приняты в магазин приложений.

2
ответ дан 30 November 2019 в 23:05
поделиться

Я пришел в SO в поисках более элегантного решения, но вот как я (успешно) делал это до сих пор.

Основная идея:

  1. НЕ используйте UINavigationController; вместо этого используйте его составные части (например, UINavigationBar) и выполняйте работу самостоятельно
  2. Запускайте навигационную панель для анимации параллельно с вашей собственной анимацией (или нет, если вы не хотите вообще никакой анимации)

Недостатки:

  1. UINavigationController автоматически обрабатывает некоторые другие вещи, такие как загрузка / выгрузка памяти. Кроме того, он «жестко закодирован» во всех UIViewController - они ВСЕГДА имеют ссылку на UINavigationController, который их содержит. Жалко все это выбросить только потому, что Apple не предоставляет крючок для настройки пользовательских анимаций.

Код - в зависимости от того, какой класс берет на себя анимацию:

UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
[navigationController.navigationBar pushNavigationItem:backItem animated:TRUE];
// next line only needed if you want a custom back anim too
navigationController.navigationBar.delegate = self;

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

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    // trigger your custom back animation here

    return TRUE;
}
3
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

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