视图控制器(SideMenu)时看不到调用

时间:2017-03-10 01:26:59

标签: ios swift email viewdidappear

我一直在我的iOS应用(邮箱)中实施SideMenu。 SideMenu用于选择当前文件夹。我创建了一个SideMenu导航控制器并附加了一个UITableViewController作为根vc。

它工作得非常好,直到我点击其中一个单元格,这将解除侧面菜单并应在原始视图控制器中加载邮件。但是,不调用原始视图控制器的viewDidAppear方法。当我试图直接调用加载函数时,Xcode表示我的tableView为零(首次加载时它不是。)

以下是我在SideMenu表中didSelectRowAtIndexPath的代码:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    currentFolder = folders[indexPath.row].path
    tableView.deselectRow(at: indexPath, animated: true)
    self.dismiss(animated: true) {
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "mail") as! MailViewController
        vc.loadMail()
    }

}

以下是原始vc中的loadMail函数:

func loadMail(showsSpinner: Bool = true) {
    ...
    if let messages = fetchedMessages as? [MCOIMAPMessage] {
        self.mailsInFolder = messages
        SwiftSpinner.hide()
        self.refresher.endRefreshing()
        self.table.reloadData()
    }

}

此外,原始vc中的viewDidAppear

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print("viewDidAppear")
    let from = self.navigationController?.transitionCoordinator?.viewController(forKey: .from)
    if from is MessageViewController {
        print("from is message controller")//should not load
        return
    }
    self.loadMail()

}

此处,未调用viewDidAppear,并且邮件无法加载。我该怎么做才能解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:-1)

我一直在使用SideMenu一段时间,我建议您使用mainViewController一个UINavigationController,然后在rightViewController中选择tableView的一个单元格

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    currentFolder = folders[indexPath.row].path
    tableView.deselectRow(at: indexPath, animated: true)
    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "mail") as! MailViewController
    {
       mainNavController.setViewControllers([vc], animated: false)
    }
    homeSlide.slideMenuController()?.closeLeft()
}

我希望这能帮到你,最好的问候