Отмена назадКнопка нажмите в моем навигационном контроллере - PullRequest
0 голосов
/ 08 марта 2011

У меня есть собственный navigationController:

#import "customNavigationController.h"
#import "StartViewController.h"
#import "EtapeViewController.h"

@implementation customNavigationController

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    // Accueil du guide, on cache le navigationBar
    if([self.viewControllers count] == 2){
        self.navigationBarHidden = TRUE;
        return [super popViewControllerAnimated:animated];
    }
    // Si on est pas à l'accueil, on fait l'action normal sur le backBarButton
    else {
        // Si on est dans une étape, le backButton va servir à reculer dans les étapes, et non reculer vers le workflow
        NSString *className = NSStringFromClass([[self.viewControllers objectAtIndex:[self.viewControllers count] - 1] class]);
        if ([className isEqualToString:@"EtapeViewController"]) {
            EtapeViewController *etape = [self.viewControllers objectAtIndex:[self.viewControllers count] - 1];
            if (etape.show_previous_button) {
                [etape previousEtape:nil];
                return FALSE;
            }
            return [super popViewControllerAnimated:animated];
        }
        else {
            return [super popViewControllerAnimated:animated];
        }
    }
}
@end

В некоторых случаях я хочу отменить событие нажатия кнопки backButton (в строке, которая читает «return FALSE»), но это не работает.

Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 08 марта 2011

вместо return FALSE вы можете сделать:

return nil;

или

return [self topViewController];

Любой из них должен иметь правый побочный эффект.

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

0 голосов
/ 08 марта 2011

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

0 голосов
/ 08 марта 2011

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

Вероятно, было бы лучше изменить дизайн интерфейса и рассмотреть 1) использование кнопок панели инструментов для навигации (например, Mobile Safari) или 2) полную поддержку представлений на основе UINavigation, а не обходить их..


Обновление: Похоже, вы собираетесь выполнить другое действие, например, отобразить подтверждение?Я не знаю ни одного официального способа сделать то, что вы хотите, поскольку методы UINavigationControllerDelegate просто уведомляют вас о переходах, они не позволяют вам отменить / изменить их.(А если переход анимированный, то, вероятно, не поможет игра со стеком представлений контроллера навигации.)

Таким образом, вы всегда можете поместить прозрачное (или почти прозрачное) окно поверх кнопки «Назад» и перехватывать нажатия таким образом.,Вот пример строки, которая похожа на строку состояния:

https://github.com/myell0w/MTStatusBarOverlay

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...