【发布时间】:2015-11-06 06:43:18
【问题描述】:
我有一个视图控制器,它使用容器视图嵌套在另一个视图控制器中。我是否可以从当前位于容器视图中的视图中分离出来,并将其替换为同一容器视图中的另一个视图控制器。 IE。容器视图周围的内容不会被占据整个视图的另一个视图控制器移除。
【问题讨论】:
标签: ios swift ipad segue uicontainerview
我有一个视图控制器,它使用容器视图嵌套在另一个视图控制器中。我是否可以从当前位于容器视图中的视图中分离出来,并将其替换为同一容器视图中的另一个视图控制器。 IE。容器视图周围的内容不会被占据整个视图的另一个视图控制器移除。
【问题讨论】:
标签: ios swift ipad segue uicontainerview
是的。您可以在Apple Docs 中阅读相关内容。
考虑到你的 containerView 目前只有一个 viewcontroller,下面是一个非常基本的例子:
func loadVCWithId(idToLoad: String){
childViewControllers[0].willMoveToParentViewController(nil)
childViewControllers[0].view.removeFromSuperview()
childViewControllers[0].removeFromParentViewController()
let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier(idToLoad)
UIView.transitionWithView(yourContainer, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromRight, animations: {self.yourContainer.addSubview((secondViewController?.view)!)}, completion: nil)
secondViewController!.view.frame = firstContainer.bounds
// do initialization of secondViewController here
secondViewController?.didMoveToParentViewController(self)
}
loadVCWithId(idToLoad:String)是宿主视图控制器中的一个方法。
在这段代码片段中,我删除了容器的当前内容(可能不是只访问索引 0 的最佳方式,但为了这个示例,这应该足够了),通过 ID 实例化一个新的 ViewController(这个存在于我的故事板中,但尚未访问),为过渡设置动画并将新的 VC 添加到容器中。
希望这会有所帮助。
【讨论】:
我的解决方案可能对
有帮助首先我在 childViewController 上创建一个协议
protocol ChildViewControllerDelaget
{
func performForSegue(SegueIdentifier:String)
}
class ChildViewController: UIViewController {
var delaget:ChildViewControllerDelaget?
override func viewDidLoad() {
super.viewDidLoad()
}
init()
{
}
@IBAction func myAction(sender: AnyObject) {
if delaget != nil {
deleget.performForSegue("mySegueIdentifier")
}
}
在 MainViewController 上
class ViewController: UIViewController,ChildViewControllerDelaget {
override func viewDidLoad()
{
super.viewDidLoad()
let child = ChildViewController()
child.delaget = self
}
func performForSegue(segueIdentifier:String)
{
self.performSegueWithIdentifier(segueIdentifier, sender: nil)
}
}
【讨论】: