我有一个视图控制器,它使用容器视图嵌套在另一个视图控制器中。我是否可以从当前位于容器视图中的视图中删除,并将其替换为同一容器视图中的另一个视图控制器。即占用整个视图的另一个视图控制器不会删除容器视图周围的内容。
答案 0 :(得分:0)
是的。您可以在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添加到容器中。
希望这有帮助。
答案 1 :(得分:0)
这个我的解决方案可能对
有帮助首先我在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)
}
}