2016-12-12 5 views
1

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

LoginVC -> AppVC [Settings, Inbox, Email] 

я в настоящее время у меня есть кнопка выхода из системы в моих настройках просмотра контроллера, однако фактическая функция выхода из системы должна быть в AppVC. Я попытался реализации делегата, но, похоже, не может получить его правильно работать

class Settings: UIViewController { 
    var delegate: LogoutDelegate? 

    @IBAction func logout(_ sender: Any) { 
     delegate?.logoutOfApp() 
    } 
} 

protocol LogoutDelegate: class { 
    func logoutOfApp() 
} 

---------------------------------- 

class AppVC: UIViewController, LogoutDelegate { 
     func logoutOfApp() { 
     print("This should be called") 
     //Execute logout code 
     } 
} 

Может кто-нибудь помочь мне понять, почему мой делегат функции разве вызывается в моей AppVC?

Update

Это, как я настраивал свои контроллеры Подходит для детей в Scrollview

func setupViews() { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     let settingsVC = storyboard.instantiateViewController(withIdentifier: "SettingsVC") 
     let inboxVC = storyboard.instantiateViewController(withIdentifier: "InboxVC") 
     let emailVC = storyboard.instantiateViewController(withIdentifier: "EmailVC") 

     let viewControllers = [settingsVC, inboxVC, emailVC] 

     let width = scrollView.bounds.width 
     let height = scrollView.bounds.height 

     scrollView.contentSize = CGSize(width: width * 3, height: height) 

     var idx = 0 

     for vc in viewControllers { 
      addChildViewController(vc) 
      let originX = CGFloat(idx) * width 
      vc.view.frame = CGRect(x: originX, y: 0, width: width, height: height) 
      scrollView.addSubview(vc.view) 
      vc.didMove(toParentViewController: self) 
      idx += 1 
     } 

     scrollView.setContentOffset(CGPoint(x: width, y: 0), animated: false) 

    } 

Я не уверен, где установить свой делегат. Я попытался установить его в моей цикл self.delegate = vc но всегда получаю ту же ошибку, не будучи в состоянии установить делегат

+1

Где вы установили делегировать? –

ответ

0

Проблема в том, что вы никогда не установить делегат, в противном случае делегат всегда будет nil и delegate?.logoutOfApp() вона» t будет выполнено.

В AppVC, что вам нужно сделать что-то вроде:

override func viewDidLoad() { 
    super.viewDidLoad() 

    settings.delegate = self 
} 
+0

Я вижу это сейчас, однако у меня возникают проблемы с настройкой делегата на себя. У меня есть все мои контроллеры childview, отображаемые в scrollView. Я не переписываю их или что-то в этом роде. Я не могу настроить свой делегат правильно, я всегда получаю ту же ошибку, не могу установить UIViewController на LogoutDelegate – user934902

+0

Убедитесь, что 'AppVC' наследуется от' LogoutDelegate' – Daniel