我想创建一个应用程序,让用户点击导航栏上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
答案 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)
为什么不使用简单的标签栏? 像这样:
并在VC1中:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
myTab.removeFromSuperview()
}
答案 2 :(得分:0)
@IBAction func unwindToViewController (sender: UIStoryboardSegue){
}
然后,您可以将条形按钮项目中的segue添加到视图控制器上的退出图标。