我有一个嵌入Tab Bar Controller和Navigation Controller中的ViewController。它有一个游戏/测验的作用:Swift - 在更改视图时确认
我希望用户确认每次如果他想,每当他试图改变视图(改变标签退出正在进行的游戏,点击“返回”或只是退出应用程序)。
所以我想我的问题是:我应该在什么地方放置我的UIAlertController
以使它按照所描述的方式工作?
我有一个嵌入Tab Bar Controller和Navigation Controller中的ViewController。它有一个游戏/测验的作用:Swift - 在更改视图时确认
我希望用户确认每次如果他想,每当他试图改变视图(改变标签退出正在进行的游戏,点击“返回”或只是退出应用程序)。
所以我想我的问题是:我应该在什么地方放置我的UIAlertController
以使它按照所描述的方式工作?
您可以分别实施UITabBarController
和UINavigationBar
,UITabBarControllerDelegate
和UINavigationBarDelegate
的代表。
对于UITabBarControllerDelegate
实现:
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
// alert here, don't go back unless user confirms
}
对于UINavigationBarDelegate
实现:
func navigationBar(navigationBar: UINavigationBar, shouldPopItem item: UINavigationItem) -> Bool {
// alert here, don't go back unless user confirms
}
注:UINavigationBar
是一个属性您UINavigationController
- 您可以通过navigationController.navigationBar.delegate = self;
嗨,谢谢,这实际上非常有用。尽管如此,我仍无法做到这一点。 'shouldPopItem'立即返回,甚至不等待'UIAlertController'响应。所以我可以在用户确认后弹出视图控制器,但导航栏项不会弹出。你知道如何解决这个问题吗@Carter? – jwitos
我不确定导航栏的含义不会弹出。在用户确认后,你可以告诉你的UINavigationController弹出,它也应该更新Bar。 – Carter
它会正确更新栏,但即使我尝试运行'self.popViewControllerAnimated'方法,视图控制器(位于导航栏下方)也不会弹出到导航堆栈上的前一个视图。 – jwitos
因此成为委托对该按钮执行addTarget动作,然后设置你的UIAlertController – Lamar