Переопределить кнопку «Назад» в навигационном контроллере

У меня есть раскадровка с этим потоком. Я использую SWRevealViewController для перехода к каждому контроллеру навигации.

- Navigation Controller 1 --> View Controller Initial (Home) --> View Controller Target
- Navigation Controller 2 --> View Controller X --> View Controller Y --> View Controller Target
- Navigation Controller 3 --> View Controller M --> View Controller Target

Из View Controller Target в каждом потоке я хочу переопределить его кнопку возврата, чтобы он мог вернуться к View Controller Initial (Home) и освободить свой объект в памяти.

Есть ли способ сделать это? Любая помощь будет оценена по достоинству. Спасибо.


person Sonic Master    schedule 30.08.2016    source источник
comment
Я хочу переопределить его кнопку «Назад», чтобы он мог вернуться к исходному контроллеру просмотра, U имел в виду здесь rootController навигацииC.?   -  person Kumar KL    schedule 30.08.2016
comment
Да, я хочу перейти к контроллеру навигации 1 из цели контроллера просмотра в каждом потоке.   -  person Sonic Master    schedule 30.08.2016


Ответы (2)


Сначала вам нужно заменить кнопку «Назад» пользовательской Back BarButton с ее селектором.

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(self.backToInitial(_:)))

func backToInitial(sender: AnyObject) {
     self.navigationController?.popToRootViewControllerAnimated(true)
}

Если вы используете swift 3.0, то синтаксис selector будет таким.

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(self.backToInitial(sender:)))

Изменить. Для SWRevealViewController попробуйте сделать так.

let revealController = self.revealViewController;
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("InitialViewController") as! InitialViewController
let navigationController = UINavigationController(rootViewController: vc)
revealController.pushFrontViewController(navigationController, animated:true)
person Nirav D    schedule 30.08.2016
comment
Привет, спасибо за ответ на мой вопрос. Это работает, но, кажется, я забыл упомянуть, что каждый поток имеет свой контроллер навигации. Смотрите мои обновления, пожалуйста. Большое спасибо. - person Sonic Master; 30.08.2016
comment
Отредактировано @NDoc. Спасибо. - person Sonic Master; 30.08.2016
comment
Оно работает! Спасибо! Но все ли в порядке с его объектом в памяти стека? - person Sonic Master; 30.08.2016
comment
Эх, это не переопределяло кнопку «Назад», а создавало новый элемент панели кнопок слева и справа? Это нормально, но все же нужно приложить усилия, чтобы кнопка выглядела как кнопка «Назад». - person Sonic Master; 30.08.2016
comment
Добро пожаловать, приятель, счастливого кодирования :), который вы можете создать с помощью пользовательского элемента barbutton. - person Nirav D; 30.08.2016

Для действия backButton в View Controller Target используйте это:

[self.navigationController popToRootViewControllerAnimated:YES];
person KSR    schedule 30.08.2016