我一直在我的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
,并且邮件无法加载。我该怎么做才能解决这个问题?谢谢!
答案 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()
}
我希望这能帮到你,最好的问候