Мое приложение имеет контроллер навигации, и я не хочу анимации в нем:
для предотвращения анимации при продвижении представления это легко через pushViewController:animated: метод
но когда я нажимаю "заднюю" кнопку на этом подпредставлении, существует анимация! KO! Что я могу сделать для предотвращения этой анимации?
Не то, чтобы вам следовало, однако вы можете переопределить стандартное поведение, создав собственный 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, не будут приняты в магазин приложений.
Я пришел в SO в поисках более элегантного решения, но вот как я (успешно) делал это до сих пор.
Основная идея:
Недостатки:
Код - в зависимости от того, какой класс берет на себя анимацию:
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;
}