在添加/删除 ViewController 作为子视图 Swift 后,ParentView 属性设置为 nil
Posted
技术标签:
【中文标题】在添加/删除 ViewController 作为子视图 Swift 后,ParentView 属性设置为 nil【英文标题】:ParentView attributes set to nil after adding/removing a ViewController as a subview Swift 【发布时间】:2015-08-10 18:08:23 【问题描述】:我有一个名为 VCA 的 ViewController,它将创建一个名为 VCB 的弹出式 ViewController。 VCB 允许用户选择一些信息,然后将其传递回 VCA。问题是,当我将 VCB 中的值传递回 VCA 时,所有 VCA 属性现在都为零或设置为其类型默认值 这是在 VCA 中创建 VCB 的代码
let VCB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
VCB.showInView(self.view)
VCB.delegate = ViewControllerA()
视图控制器B
func showInView(aView: UIView!)
view.center = aView.center
aView.addSubview(self.view)
然后我关闭 VCB
@IBAction func recordButtonTapped(sender: UIButton)
self.delegate.someMethod(someValue: someType, ...)
self.view.removeFromSuperview()
但是当调用 someMethod(...) 时,VCA 中的属性设置为 nil,我得到了一个
fatal error: unexpectedly found nil while unwrapping an Optional value
任何帮助或建议都会很棒
【问题讨论】:
【参考方案1】:您正在像这样设置 VCB 的代表:
vcb.delegate = ViewControllerA()
正在实例化一个新的 VCA 实例。
您大概打算将 VCB 的委托设置为现有的 VCA 实例。例如,如果在 VBA 的实例方法中完成,您只需这样做:
vcb.delegate = self
--
顺便说一句,在将 VCB 的视图添加到您的视图层次结构中时,您确实应该执行包含调用 addChildViewController
和 didMoveToParentViewController
:
let vcb = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
addChildViewController(vcb)
vcb.showInView(self.view)
vcb.delegate = self
vcb.didMoveToParentViewController(self)
同样,当您删除它时,请致电willMoveToParentViewController
和removeFromParentViewController
:
@IBAction func recordButtonTapped(sender: UIButton)
delegate.someMethod(someValue: someType, ...)
willMoveToParentViewController(nil)
view.removeFromSuperview()
removeFromParentViewController()
您总是希望您的视图控制器层次结构与您的视图层次结构保持同步。请参阅UIViewController Class Reference 的实现容器视图控制器部分。
【讨论】:
以上是关于在添加/删除 ViewController 作为子视图 Swift 后,ParentView 属性设置为 nil的主要内容,如果未能解决你的问题,请参考以下文章
添加 CollectionViewController 作为另一个 ViewController 的子视图
从SuperView的ViewController外部的类调用时,willRemoveSubview不会删除子视图吗?
按下 ToolBar 按钮时向 UIViewController 添加和删除子 ViewController
如何将collectionview作为子视图添加到viewcontroller
在 iOS 8 中将 ViewController 的 View 作为子视图添加到 UIPageViewController 会在显示/隐藏时产生奇怪的 UINavigationBar