为啥superview返回零? [复制]
Posted
技术标签:
【中文标题】为啥superview返回零? [复制]【英文标题】:Why is superview returning nil? [duplicate]为什么superview返回零? [复制] 【发布时间】:2021-12-02 22:09:01 【问题描述】:在最底部是我的代码,其中 MainController 启动了一个名为 setController 的子视图。但是,在 setController 的代码中,当我尝试使用超级视图时,我得到了一个 nil:
override func viewDidLoad()
super.viewDidLoad()
print(self.view.superview ?? "no parent")
我将第二个视图指定为子视图,但显然我遗漏了一些东西。我是否误解了 UIView 层次结构的工作原理?
class MainController: UIViewController
private lazy var setController = SetController()
var invButton : MyButton!
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = .black
invButton = makeButton(vControl: self, btype: ButtType.inv, action: #selector(self.buttonAction(sender:)))
invButton.frame.origin.x = self.view.frame.width * 0.1
invButton.frame.origin.y = self.view.frame.height * 0.1
invButton.setTitle("Settings", for: .normal)
override var prefersStatusBarHidden: Bool
return false
@objc func buttonAction(sender: UIButton!)
guard let theButton = sender as? MyButton else return
UIView.transition(with: self.view, duration: 0.5, options: .transitionCurlDown, animations: [self] in
self.view.addSubview(setController.view)
, completion: nil)
【问题讨论】:
这能回答你的问题吗? Adding a view controller as a subview in another view controller。您可能需要在您的setController
上致电addChild
和didMove(toParent:)
这不是 SwiftUI
【参考方案1】:
对于遇到此问题的任何人,我都在这里找到了答案:
https://guides.codepath.com/ios/Adding-and-Removing-Child-View-Controllers
我的错误是我没有意识到添加子视图是一个多行过程。
所以 self.view.addSubview(setController.view) 变成了:
addChild(setController);
view.addSubview(setController.view);
setController.didMove(toParent: self);
【讨论】:
以上是关于为啥superview返回零? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaScript 中,为啥零除以零返回 NaN,而任何其他除以零返回 Infinity?
为啥 QNetworkReply readAll() 返回零字节?