2016-05-15 60 views
0

我有一个嵌入Tab Bar Controller和Navigation Controller中的ViewController。它有一个游戏/测验的作用:Swift - 在更改视图时确认

enter image description here

我希望用户确认每次如果他想,每当他试图改变视图(改变标签退出正在进行的游戏,点击“返回”或只是退出应用程序)。

所以我想我的问题是:我应该在什么地方放置我的UIAlertController以使它按照所描述的方式工作?

+0

因此成为委托对该按钮执行addTarget动作,然后设置你的UIAlertController – Lamar

回答

1

您可以分别实施UITabBarControllerUINavigationBar,UITabBarControllerDelegateUINavigationBarDelegate的代表。

对于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;

+0

嗨,谢谢,这实际上非常有用。尽管如此,我仍无法做到这一点。 'shouldPopItem'立即返回,甚至不等待'UIAlertController'响应。所以我可以在用户确认后弹出视图控制器,但导航栏项不会弹出。你知道如何解决这个问题吗@Carter? – jwitos

+0

我不确定导航栏的含义不会弹出。在用户确认后,你可以告诉你的UINavigationController弹出,它也应该更新Bar。 – Carter

+0

它会正确更新栏,但即使我尝试运行'self.popViewControllerAnimated'方法,视图控制器(位于导航栏下方)也不会弹出到导航堆栈上的前一个视图。 – jwitos