我有一个 subview 接管了整个父 View 。我希望通过使用协议(protocol)从父级调用一个方法来将子级从父级中移除,但我的委托(delegate)每次都是零。如果您需要更多信息,我会在下面添加我的示例作品,请告诉我
protocol childDelegate: class {
func removeFromParent()
}
class ChildAction: UITableViewController {
@IBAction func btnRemove(_sender: Any){
if(delegate != nil){
self.delegate?.removeFromParent()
}
}
}
class ParentClass: UIViewController:childDelegate {
var delegate:childDelegate?
private ChildActionView:ChildAction{
let storyboard = UIStoryBoard(name: "Main", bundle: Bundle.main)
let viewC = storyboard.instantiateViewController(withIdentifier: "ChildAction") as! ChildAction
self.delegate = viewC as? childDelegate
self.addChildViewController(viewC)
return viewC
}
@IBAction func btnAddChild(_sender: Any){
addChild(child:ChildActionView)
}
func addChild(child: UIViewController){
self.addChildViewController(child)
view.addSubview(child.view)
child.didMove(toParentViewController: self)
}
func removeFromParent(){
//remove from parent
}
}
最佳答案
您没有在代码的任何位置设置ChildAction
实例(您的childVC
)的delegate
变量。您将 parent's delegate
设置为 child 但这在您的代码中毫无意义。您需要将child 的委托(delegate)
设置为parent。当前子项没有任何对其父项的引用,因此它的委托(delegate)自然是 nil
。如果有什么不清楚的地方,请告诉我。
关于ios - 尝试从父 IOS swift 3 中删除子项时,我的代表为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44948517/