在 UITabController 中关闭视图控制器
Posted
技术标签:
【中文标题】在 UITabController 中关闭视图控制器【英文标题】:Dismiss View Controller within UITabController 【发布时间】:2016-07-03 15:15:11 【问题描述】:我的故事板上有以下堆栈
-> Navigation Controller
-> MyCoursesViewController (does a prepareForSegue to next 'view')
-> Course Info UITabController (I select Setting Tab)
-> Setting Navigation Controller
-> SettingViewController
当我在设置选项卡中时:SettingViewController,我有一个 UIButton,上面写着“退出课程”,我希望它返回到 MyCoursesViewController。我怎样才能弹出到这个视图控制器?
我尝试了以下方法:
self.tabBarController?.navigationController?.dismissViewControllerAnimated(true, completion: nil)
self.navigationController?.tabBarController?.dismissViewControllerAnimated(true, completion: nil)
self.dismissViewControllerAnimated(true, completion: nil)
self.tabBarController?.navigationController?.popViewControllerAnimated(true)
self.navigationController?.popViewControllerAnimated(true)
但无济于事。
有没有办法简单地解除或我需要从 MyCoursesViewController 实现一个委托以通过 UITabController 传递给 SettingViewController?我不确定如何将代表传递给MyCourses -> Course Info Tab -> Setting
。如果是MyCourses -> Setting
,那只是从类到类的简单委托传递,但令人困惑的部分是中间的 Tab 控制器。
【问题讨论】:
【参考方案1】:试试这个:
self.tabBarController?.navigationController?.popViewControllerAnimated(true)
我认为要从MyCoursesViewController
转到UITabController
,您正在使用pushViewController 或segue 为您执行此操作,所以要返回您必须使用popViewControllerAnimated
。
dismissViewControllerAnimated
用于关闭使用presentViewController
显示的视图控制器
编辑:
所以如果你有两个 UINavigationController 我认为这段代码对你有用:
self.navigationController?.parentViewController?.navigationController!.popViewControllerAnimated(true)
【讨论】:
ops 我也尝试过,但没有将其包含在列表中 全部替换“?”和 ”!”并查看哪些行通过以及那些使应用程序崩溃的行,我认为所有行都以 self.navigationController! 开头。会崩溃,因为 SettingViewController 没有直接附加到 uinavigationController 这让我思考并查看了它在 SettingViewController 之前确实有一个 UINavigationController 的层次结构。所以我需要像双重流行音乐这样的东西。 UITabBarController 好像弹不出来 在更新 UITabBarController 类后,我也得到了这种方法。【参考方案2】:根据您的描述,听起来MyCoursesViewController
是您的NavigationController
的rootViewController
。
您将CourseInfoUITabController
推入堆栈,而您的SettingViewController
实际上嵌入在UINavigationController
中,因此您可以这样做:
self.navigationController?.tabBarController?.navigationController?.popViewControllerAnimated(true)
【讨论】:
我更新了问题,所以要回答你的问题,是的,MyCoursesViewController 是 NavigationController 的 rootViewController。我对 CourseInfoUITabController 执行ForSegue。我尝试了两个弹出,但它没有弹出。 您为segue
设置的style
是什么?如果在storyboard中设置,在设置segue
的identifier
时可以看到style
它只是一个展示(推送)
我只是像您上面描述的那样设置了一个简单的项目,self.navigationController?.popViewControllerAnimated(true)
可以工作。在您过境时,日志中是否有任何警告消息?
Depondies,我错过了一个级别,它是选择标签时是一个导航控制器。点击“设置”选项卡 -> 导航控制器 -> 设置 uiviewcontroller【参考方案3】:
您可以从 SettingViewController 发出自定义 NSNotification,它将由 MyCoursesViewController 处理并执行您需要的任何操作。
这种方法更正确,因为在开发过程中事情可能会变得更加复杂,并且您的层次结构可能会发生变化。通过使用 NSNotification,您可以减少部分代码的耦合,这是一件好事
【讨论】:
如何将视图传递给 MyCoursesViewController 以关闭/弹出?【参考方案4】:在我看来,如果我正确理解您的视图层次结构,它应该是:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let rootNavigationController = appDelegate.window?.rootViewController as! UINavigationController
rootNavigationController.popToRootViewControllerAnimated(true)
【讨论】:
以上是关于在 UITabController 中关闭视图控制器的主要内容,如果未能解决你的问题,请参考以下文章