Swift:单击后退按钮后错过标签栏

Posted

技术标签:

【中文标题】Swift:单击后退按钮后错过标签栏【英文标题】:Swift: miss tab bar after click Back button 【发布时间】:2014-12-31 18:42:32 【问题描述】:

我是 swift 和 ios 开发的新手。我正在开发一个选项卡式应用程序(3 个视图)。例如,FirstView、SecondView 和 ThirdView。 FirstView 有一个打开 addNewSession 视图的按钮,而 addNewSession 视图有一个返回 FirstView 的返回按钮。问题是从 addNewSession 视图返回后标签栏消失了

FirstView 到 addNewSession 视图。

 @IBAction func toAddNew(sender: AnyObject) 
            let addNewSession = self.storyboard?.instantiateViewControllerWithIdentifier("addNewSession") as addNew
            self.presentViewController(addNewSession, animated: true, completion: nil)
        

将NewSession 视图添加到FirstView

@IBAction func backToPrev(sender: AnyObject) 
        println("test1")
        let FirstView = self.storyboard?.instantiateViewControllerWithIdentifier("FirstView") as FirstViewController
        self.presentViewController(FirstView, animated: true, completion: nil)
    

【问题讨论】:

【参考方案1】:

问题是您的 backToPrev 方法正在实例化一个新的 FirstViewController,这与您来自的实例不同。你并没有真正回到原来的那个,你正在展示一个新的。这不是你想要的。

执行此操作的正确方法是将 FirstViewController 嵌入到导航控制器中,然后将 addNew 控制器推送到它上面。当您使用导航控制器时,您可以免费获得返回行为。

希望您使用的是故事板?选择您的 FirstViewController,进入 Editor 菜单并选择 Embed in Navigation Controller。

在您的 toAddNew 中,使用 self.navigationController.pushViewController 代替 presentViewController 来推送您的 addNew 控制器。

还有一种更简单的方法可以完成最后一步,即使用 segue。您可以控制故事板中从 FirstViewController 中的按钮到 addNew 控制器的拖动,并创建一个 Show segue。当按钮被触摸时,这将自动显示您的 addNew 控制器。使用这种方法,您将需要删除您的 toAddNew IBAction 和连接,因为它是多余的。

【讨论】:

以上是关于Swift:单击后退按钮后错过标签栏的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:我无法隐藏后退按钮

Swift 5 - 用户第二次单击标签栏按钮后,需要帮助在视图控制器 1 上重新加载 Web 视图

如何在标签栏控制器视图上创建后退按钮?

使用导航控制器后标签栏项目图标丢失

从标签栏控制器打开带有后退按钮的单独 ViewController

单击隐藏选项卡视图控制器中的后退按钮时如何显示选项卡