2016-11-11 3 views
0

У меня есть ViewController: если пользователь не вошел в систему, я открываю новый контроллер, чтобы пользователь мог войти в систему. Открытие сделано таким образом:Вызов метода представления viewcontroller из модального

if(!loggedIn){ 
      self.performSegue(withIdentifier:"loginView", sender:self) 
     } 

После входа в систему, я хочу, чтобы закрыть эту модальность и вернуться к моей ViewController: это очень легко сделать, но я хочу еще одна вещь. Я хочу, чтобы оператор представления представления вызывал этот метод до того, как я отклонил свой модальный код:

func goToContent(animated:Bool){ 
     let viewController:ContentViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Content") as! ContentViewController 
     self.navigationController!.pushViewController(viewController, animated: animated) 
    } 

Возможно ли это? Из моего модального кода я не мог получить ссылку на презентацию viewController. То есть: я попытался следующие, но я не знаю, если это правильный путь, чтобы продолжить:

let vc:ViewController = ViewController() 
vc.goToContent(animated:false) 

Это работает, но не там лучшие решения?

[Редактировать, чтобы ответить на вопрос в комментариях] я реализовал делегатом так:

в ViewController:

class ViewController: UIViewController, LoginViewControllerDelegate { 

    var loginViewController:LoginViewController = LoginViewController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     loginViewController.delegate = self 
    } 

В LoginViewController файле, как раз перед объявлением класса:

protocol LoginViewControllerDelegate: class { 

    func goToContent(animated:Bool) 

} 

Внутри LoginViewController:

weak var delegate: LoginViewControllerDelegate? 

по его мнению, сделал нагрузки (только для тестирования: Я просто поставить печать внутри тела goToContent):

delegate?.goToContent() 
+0

Вы попробовали это ... если да, в чем проблема? – KKRocks

+0

Нет никаких проблем: я хочу знать, нужно ли правильно настроить презентационный контроллер представления из моего модального кода. Я не мог получить ссылку на мой диспетчер представления, потому что он был открыт через segue (performSegue) –

+0

, пожалуйста, добавьте свой код для настоящего? – KKRocks

ответ

2

Вы должны создать делегат ContentViewController и в этом делегатом вам нужно добавить этот способ goToContent.

Теперь, когда вы вошли в систему успешно, вам необходимо вызвать этот метод делегата. Это будет работать.

+0

Но ContentViewController это экран, который я открываю с помощью segue из «базового» viewcontroller, который сначала открывает модальный метод, а gotoContent - это функция, содержащаяся в этом контроллере представления. –

+0

. Затем вам нужно создать делегат 'ViewController' – Rajat

+0

Итак, мне не нужно создать экземпляр ViewController? –

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