UIViewControllers
の間でいくつかのアニメーションをテストしようとしています。この特定のケースでは、子ビューとして別のUIVC
を追加するUIViewController
があります。子ビューコントローラを親から削除すると、アプリケーションがクラッシュする
すべてが期待どおりに動作し、子ビューが追加されて表示され、子供ビューでは私はUINavigationBar
を持っています。左ボタンのボタンとしてキャンセルボタン(dismiss)があります。
私はそのボタンをクリックすると、(親ビューからの)ビュー階層からこの提示された子ビューを削除しようとする機能を起動します。
親ビューからコード:
// ViewController -> Parent
lazy var presentButton: UIButton = {
let b = UIButton(type: .custom)
b.setTitle("Present", for: .normal)
b.setTitleColor(.black, for: .normal)
b.addTarget(self, action: #selector(didTapPresentButton), for: .touchUpInside)
return b
}()
lazy var childViewController: PresentedViewController = {
let viewController = PresentedViewController()
return viewController
}()
@objc func didTapPresentButton() {
addViewControllerAsChildViewController(childViewController: childViewController)
}
func addViewControllerAsChildViewController(childViewController: UIViewController) {
self.addChildViewController(childViewController)
childViewController.view.frame = CGRect.zero
self.view.addSubview(childViewController.view)
let newFrame = view.bounds
UIView.animate(withDuration: 2) {
childViewController.view.frame = newFrame
}
childViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
childViewController.didMove(toParentViewController: self)
}
あなたが上記を参照したように、私は、現在のボタンをクリックしたとき、それは子ビューをインスタンス化し、これまでのところ、とても良いそれをアニメーション化します。
子ビューコード:私はキャンセルボタンをクリックすると、子ビューに今
// ChildViewController -> Child (ofc)
@objc func didTapCancel() {
self.willMove(toParentViewController: nil)
self.view.removeFromSuperview()
self.removeFromParentViewController()
}
は、私はそれが適切に削除されるためにremoveFromParentViewController()
を呼び出す必要があります知っているが、アプリがクラッシュした場合はI followinggエラーではないこと:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[dismissLayerTest.ChildViewController name]: unrecognized selector sent to instance 0x7fea2f60a920'
それから私はself.removeFromParentViewController()
行をコメントしようとした、そしてそうすることで、アプリがクラッシュしませんが、その後、親ビューコントローラに私は、ビューはまだであることがわかりますその親に印刷することによって添付するself.childViewControllers.count
と私は1
を示しています。
どこに問題がありますか?
ありがとうございました
エラーの原因を特定するために、コード内の「名前」を検索してください。 –
@YunCHEN「名前」のプロパティまたはメソッドコールはありません。/ –
このリンクを参考にしてください:https://stackoverflow.com/questions/46196201/how-to-transfer-data-between-parent-and -child-view-controllers?answertab = active#tab-top –