移动回另一个视图时,标签栏控制器消失

时间:2016-10-10 06:29:43

标签: ios swift xcode uinavigationbar segue

我想创建一个应用程序,让用户点击导航栏上V1上的按钮。这将转到V2,在那里他们可以按下V2上导航栏上的另一个按钮,它将把它们带回到V1,底部有标签栏控制器。我不想要V2上的标签栏,我不希望V2作为标签栏项目。当我尝试这个时,当我从V2中回到V1时,标签栏在V1上消失。

TAB BAR CONTROLLER - > TAB BAR ITEM(V1) - > V2(通过V1上的导航栏按钮项) - >返回V1(通过V2上的导航栏按钮项目)

我已将[self.navigationController, popViewControllerAnimated:YES];添加到我的按钮功能中,但它出现了一个错误 - 容器文字中的预期表达式。

除了这段代码,我的应用程序还没有其他任何代码。

我正在使用Xcode 8.0和Swift 3.0

3 个答案:

答案 0 :(得分:0)

首先创建UITabBarController的子类,然后将属性添加到AppDelegate

var navController: UINavigationController?
var tabController: MyTabController?

如果您想在应用启动时显示标签栏控制器,请将这些代码放在AppDelegate中的didFinishLaunchingWithOptions

 self.window = UIWindow(frame: UIScreen.main.bounds)
 let myStoryboard = UIStoryboard(name: "Main", bundle: nil) as UIStoryboard
 self.tabController = myStoryboard.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController
//self.navController = UINavigationController(rootViewController: self.tabController!)
//self.window?.rootViewController = self.navController
 self.window?.rootViewController = self.tabController
 self.window?.makeKeyAndVisible()
 return true

如果您想在登录后跳转标签栏或其他内容,请将属性添加到该控制器

 var appDelegate: AppDelegate!
viewDidLoad

中的

 appDelegate = UIApplication.shared.delegate as? AppDelegate

方法应该

 func logIntoApp() {

    appDelegate.tabController = self.storyboard?.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController
    appDelegate.window?.rootViewController = appDelegate.tabController
 }

然后在标签项视图控制器中,创建AppDelegate的属性并按上述方式分配委托。

方法应该是:

@IBAction func showWithTab(_sender: AnyObject) {

      let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController
      self.navigationController?.pushViewController(DefaultVC, animated: true)
}

@IBAction func showWithoutTab(_sender: AnyObject) {

      let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController

    // You can create your own animation
      UIView.transition(from: (appDelegate.tabController?.view)!, to: (appDelegate.navController?.view)!, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in

      self.appDelegate.window?.rootViewController = self.appDelegate.navController
    }

    // OR you can use like this way
      UIView.transition(from: self.view, to: DefaultVC.view, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in

      self.appDelegate.window?.rootViewController = self.appDelegate.navController
    }
}

答案 1 :(得分:0)

为什么不使用简单的标签栏? 像这样:

enter image description here

并在VC1中:

 override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    myTab.removeFromSuperview()
}

答案 2 :(得分:0)

经过几天的努力找出答案后,我已经解决了我的问题。您需要将其添加到任何视图控制器。

@IBAction func unwindToViewController (sender: UIStoryboardSegue){

    }

然后,您可以将条形按钮项目中的segue添加到视图控制器上的退出图标。

You can view an image of the VC scene here.