我有两个课程:MyViewController: UIViewController
和TheView: UIView
。在MyViewController
里面我声明并对象var theView: TheView
和一个布尔标志如var flag: Bool = false
。如何从flag
类中获取TheView
值而不从MyViewController
传递?我尝试过像if let vc = self.parentViewController as? MyViewController { }
这样的方法,但没有成功。
答案 0 :(得分:0)
很难获得对视图相关控制器的引用这一事实应该暗示它是不好的做法。最好将父视图控制器传递到视图的初始化器并将其存储为弱引用。
class TheView: UIView {
weak var parentViewController: MyViewController?
init(parentViewController: MyViewController) {
self.parentViewController = parentViewController
}
}
// in MyViewController...
let view = TheView(parentViewController: self)
答案 1 :(得分:0)
最好的方法是在TheView中声明一个引用父项的变量,并在实例化TheView时设置它:
var parentController: MyViewController?
然后,当您实例化View时,您可以附加父级:
// Instantiate your view either view storyboard or code and then:
self.theView.parentController = self
答案 2 :(得分:0)
从视图中获取parentViewController
然后使用此扩展程序。
extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}
像这样获得UIView
parentViewController
。
class TheView: UIView {
func teset(){
if let vc = self.parentViewController as? ViewController {
//Sccess block
}
}
}
你的ParentViewController就像。
class ViewController: UITableViewController {
var theView: TheView = TheView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(theView)
}