2013-11-19 2 views
0

В моей RecordViewController, в didSelectRowAtIndexPath я нажимаю на detailViewController (который наследуется от UIViewController):Как переопределить обратную навигацию?

[[self navigationController] pushViewController:detailViewController animated:YES]; 

После DetailViewController появляется я вижу Back navigationButton в верхнем левом углу, который автоматически выскакивает текущий контроллер представления чтобы вернуться к предыдущему ViewController.

Теперь мне нужно показать UIAlertView и спросить пользователя, должны ли данные быть сохранены или нет.

И только когда пользователь принял решение, текущий контроллер представления должен исчезнуть.

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

Есть ли способ, который я мог бы переопределить для достижения этого?

+0

Рекомендации по применению iOS говорят, что все данные должны сохраняться неявно, то есть кнопки «Сохранить/Отменить». –

+0

Как насчет отмены функции данных ядра? Если никогда не было необходимости в отмене? :) – Houman

ответ

1

Создать UIBarButtonItem:

UIBarButtonItem * backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @"Back" 
    style: UIBarButtonItemStyleDone target: self action: @selector(onBackButtonTapped:)]; 

Назначают его в левой панели кнопок пункт:

self.navigationItem.leftBarButtonItem = backBarButtonItem; 

Реализовать onBackButtonTapped API:

- (void) onBackButtonTapped: (id) sender 
{ 
    // Display an UIAlertView 
} 

Вы можете настроить кнопку назад. Пожалуйста, просмотрите UIBarButtonItem для получения более подробной информации.

0

Вместо того, чтобы нажимать контроллер подробного представления, обычным способом сбора данных является представление одного модально. Это даст вам 2 свободных места слева и справа от (новой) панели навигации, чтобы поместить кнопку «Сохранить и отменить».

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; 
[self presentViewController:navigationController animated:YES completion:nil]; 
// detailViewController will have to set up buttons in its init 

Вы можете использовать протокол делегата вы создаете для обработки и сохранения отменить действия в предъявлению (т.е. не деталь) контроллер вида.

0

Обзор: Идея состоит в том, чтобы иметь свою собственную барную стойку, чтобы перехватить поддержку из VC.

В вашем viewDidLoad вы можете сделать это

UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
    style:UIBarButtonItemStyleDone target:self action:@selector(Back:)]; 
self.navigationItem.backBarButtonItem = backButtonItem; 

Тогда ваш Назад: метод может сделать это

-(void)Back:(id) sender 
{ 
    //Your code for showing AlertView with delegate as self. Remember to conform to the UIAlertViewDelegate protocol. 
} 

Затем положить сохранить функциональность в

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (selected buttonIndex is the one for saving data) 
    { 
     //save your data    
    } 
    //popViewController 
} 
Смежные вопросы