为什么我不能从超级视图中删除viewController?

时间:2019-08-17 13:39:47

标签: swift uiview uiviewcontroller

我想从其父级中删除viewController。我尝试过:

selectCardViewController.removeFromParent()

这:

selectCardViewController.view.removeFromSuperview()

但是我的viewController仍然在屏幕上。

我该如何解决?


更新

这就是我呈现此viewController的方式:

private func setupModalSelectCard() {

    selectCardViewController = SelectCardViewController(nibName:"SelectCardViewController", bundle:nil)
    self.addChild(selectCardViewController)
    selectCardViewController.view.layer.cornerRadius = 12
    self.view.addSubview(selectCardViewController.view)

    cardHandleOriginY = selectCardViewController.handleArea.frame.origin.y
    selectCardViewController.view.frame = CGRect(x: 0, y: self.view.frame.height - cardHandleOriginY - selectCardHandleAreaHeight, width: self.view.bounds.width, height: selectCardHeight)

    selectCardViewController.view.clipsToBounds = true

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(EditorViewController.handleCardTap(recognzier:)))
    let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(EditorViewController.handleCardPan(recognizer:)))

    selectCardViewController.handleArea.addGestureRecognizer(tapGestureRecognizer)
    selectCardViewController.handleArea.addGestureRecognizer(panGestureRecognizer)

   selectCardViewController.view.layoutIfNeeded()
}

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的问题,则说明您位于selectCardViewController中,并且想要停止该视图控制器。 RemoveFromParent仅打算由自定义容器视图控制器的实现调用。 selectCardViewController可能没有父级。无法删除来自视图控制器本身的视图,因为它也没有父视图。

要解决这种情况,您可以在视图控制器中实现一个要返回的方法。该方法必须具有以下声明:

@IBAction func myGobackMethod(segue: UIStoryboardSegue) {

    //Do whatever you want to do.
}

在情节提要中,可以通过控制将按钮拖到视图控制器中的出口,从而将selectCardViewController中的按钮链接到此方法。 enter image description here

如果要使用编写的代码返回该方法,则:

performSegue(withIdentifier:“ myIdentifuer”,发件人:“ Whomever例如self”)

希望这会有所帮助。