2017-01-08 3 views
0

Как получить контроллер вида, который запускает сеанс без использования делегатов. И не установите его в prepareForSegue. И оба контроллера обзора будут встроены в свои навигационные контроллеры.Как получить контроллер вида, который запускает segue

Я хотел бы получить этот контроллер просмотра с представленного контроллера вида. Я знаю, что это не способ iOS, так как iOS использует делегаты.

Но я был бы признателен, как получить ссылку.

ответ

1

Здесь есть две основные концепции, которые вы должны понимать. Во-первых, это контроллер навигации, который подталкивает новый контроллер представлений в верхней части стека viewControllers, а второй - простой контроллер модального представления, который просто представляет новый контроллер представления.

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

if let viewControllers = navigationController?.viewControllers, viewControllers.count > 1 { 

    let presentingViewController = viewControllers[viewControllers.count - 2] 
} 

И, в случае модального вы можете просто использовать presentingViewController свойство UIViewController. Также обратите внимание, что presentingViewController не является обязательным, что означает, что если этот контроллер представления не является представленViewController viewcontroller, который представляет его, то presentingViewController становится нулем.

0

Вы можете получить весь стек UIViewControllers из UINavigationController:

let viewControllers = self.navigationController.viewControllers 

Вы можете прочитать назад от последнего и обратно:

if let viewController = viewControllers[viewControllers.count - x] { 
    // Do stuff 
} 

Где x представляет собой целое число, чтобы определить, как далеко назад стек, который вы хотите отправить.

Смежные вопросы