我有两个类:MyViewController: UIViewController和TheView: UIView。在MyViewController中,我声明了var theView: TheView和一个布尔标志,比如var flag: Bool = false。如何在不从MyViewController传递if的情况下从TheView类内部获取flag值?我尝试过像if let vc = self.parentViewController as? MyViewController { }这样的方法,但没有成功。
发布于 2018-01-22 19:27:49
很难获得对视图的关联控制器的引用的事实应该是一个暗示,这是一个糟糕的实践。您最好将父视图控制器传递到视图的初始化器中,并将其存储为弱引用。
class TheView: UIView {
weak var parentViewController: MyViewController?
init(parentViewController: MyViewController) {
self.parentViewController = parentViewController
}
}
// in MyViewController...
let view = TheView(parentViewController: self)发布于 2018-01-22 19:49:33
最好的方法是在TheView中声明一个引用父级的变量,并在实例化TheView时进行设置:
var parentController: MyViewController?然后,在实例化theView时,可以附加父对象:
// Instantiate your view either view storyboard or code and then:
self.theView.parentController = self发布于 2018-01-22 20:38:27
从视图中获取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)
}https://stackoverflow.com/questions/48380401
复制相似问题