4 个视图控制器之间的简单自定义导航
Posted
技术标签:
【中文标题】4 个视图控制器之间的简单自定义导航【英文标题】:Simple, custom navigation between 4 view controllers 【发布时间】:2015-07-03 16:09:36 【问题描述】:我有 UIScrollView,其中包含许多以下 订阅视图控制器。每个订阅视图控制器包含容器视图控制器。
目标是在右侧的4个ViewsControllers之间做一个简单的导航。
导航逻辑:
在 viewDidLoad 上显示 Container 中的第一个或第二个 View Controller 当用户按下 View Controller 上的按钮时,在 Container 中显示第三个 View Controller我尝试使用 Segues 但这不起作用。实例化 VC 的方法 订阅视图控制器不是个好主意。
【问题讨论】:
【参考方案1】:使用此代码切换容器视图视图...
@IBOutlet weak var container: UIView!
var currentViewController:UIViewController?
//put the view did load method here.
@IBAction func buttonPressed()
//the storyboard file that the view is in.
let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
// the container view you want to switch to.
self.currentViewController = storyboard.instantiateViewControllerWithIdentifier("containerViewStoryboardID") as? UIViewController
//switch the container view.
self.addChildViewController(self.currentViewController!)
self.container.addSubview(self.currentViewController!.view)
self.currentViewController!.didMoveToParentViewController(self)
【讨论】:
Emm,这是个坏主意,因为我需要删除子视图,并且从其他 VC 切换时会遇到问题。 这个我用过很多次了,效果很好。您还在寻找什么其他解决方案?您是否只想切换整个 VC? 是的,我需要将整个 VC 切换到其他。但是下一个VC应该能够将自己切换到其他VC。不要忘记数据交换【参考方案2】:我发现最简单的方法是创建自定义Segue。
创建自定义UIStoryboardSegue
-
转到文件 -> 新建 -> 文件...并选择 Cocoa 类
-
从 UIStoryboardSegue 创建一个新类
-
配置 MySegue
import UIKit
class NewSegue: UIStoryboardSegue
//Call when performSegueWithIdentifier() called
override func perform()
//ViewController segue FROM
var sourceViewController: UIViewController = self.sourceViewController as! UIViewController
//ViewController segue TO
var destinationViewController: UIViewController = self.destinationViewController as! UIViewController
//Parent ViewController - ContainerViewController
var containerViewController: UIViewController = sourceViewController.parentViewController!
//Setting destinationViewController
containerViewController.addChildViewController(destinationViewController)
destinationViewController.view.frame = sourceViewController.view.frame
sourceViewController.willMoveToParentViewController(nil)
//Do animation
containerViewController.transitionFromViewController(sourceViewController,
toViewController: destinationViewController,
duration: 0.3,
options: UIViewAnimationOptions.TransitionCrossDissolve,
animations: nil, completion: finished in
//Delete sourceViewController
sourceViewController.removeFromParentViewController()
//Show destinationViewController
destinationViewController.didMoveToParentViewController(containerViewController)
)
-
转到您的 Storyboard 文件并控制从 ContainerViewController 拖动到所需的 Controller 并在上下文菜单中选择 Custom
3.点击创建的segue并配置它们
-
现在您可以在 ContainerViewController 或其他 ViewController 中调用
performSegueWithIdentifier("SugueID", sender: self)
【讨论】:
以上是关于4 个视图控制器之间的简单自定义导航的主要内容,如果未能解决你的问题,请参考以下文章
防止自定义 UINavigationBar 元素在视图之间更改