UINavigationController Пользовательский метод popViewControllerAnimated - PullRequest
2 голосов
/ 11 ноября 2011

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

У меня есть заказчик, как показано ниже:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    if([[self.viewControllers lastObject] class] == [weddingSetupController class]){

        UIAlertView *exitAlert = [[UIAlertView alloc] 
                                  initWithTitle:@"Are you sure?" 
                                  message:@"By leaving the setup, all current changes will be lost. The setup can be retsrated later if you decide to leave now. However, it is recomened for your best experience that you complete the setup." 
                                  delegate:self cancelButtonTitle:@"No" 
                                  otherButtonTitles:@"Yes", nil
                                  ];

        [exitAlert show];

        return nil;
    } 
    else {
        return [super popViewControllerAnimated:animated];
    }
}

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

Надеюсь, что это имеет смысл и может помочь мне решить эту проблему, спасибо.

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

Когда вы нажимаете кнопку «Назад» на панели навигации, он вызывает:

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated;

в UINavigationBar, который, в свою очередь, вызывает popViewControllerAnimated на контроллере навигации.Переопределите этот метод (я использую категорию, чтобы избежать создания подклассов) и используйте тот же подходВаша главная точка зрения была на шаг позже.

1 голос
/ 11 ноября 2011

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

Но если вы все еще хотите сделать это таким образом, может быть лучше использовать модальное представление с Cancel иГотово кнопками вверху.И теперь, когда я думаю об этом, Mail попросит вас сохранить неотправленный черновик, используя лист действий.

...