2017-07-13 23 views
1

私は2つのView Controllerを持っています。特定のボタンをsecondVCが削除されるタップとfirstVCバック取得されたときsecondVでSwift - removeFromSuperview()が呼び出された後に通知を受け取る方法?

let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "tagsStory") as! TagsVC 
    self.addChildViewController(popOverVC) 
    popOverVC.view.frame = self.view.frame 
    self.view.addSubview(popOverVC.view) 
    popOverVC.didMove(toParentViewController: self) 

:ときにアプリが起動firstVCは、特定のボタンがタップされたならば、次いでsecondVCこのコードを使用して呼び出され、ロードされていますこのコードを介してユーザに:

self.view.removeFromSuperview() 

secondVCがfirstVC内で削除されたとき、私の質問は、どのように私は通知を受けるんですか?

私は、viewDidAppear、viewWillAppear、willMove ...を使用しようとしましたが、まだ何も働いていませんでした。 secondVCで

答えて

0

単純に関数呼び出しを行う場合は、単にnotificationを使用します。親ビューコントローラで、関数呼び出しを受け取るための通知を登録します。ビューコントローラは

を破壊されたときにあなたの子供のビューコントローラでは、あなたが親からそれを削除しようとしていたときに、この中に登録した通知の目的球を呼び出して、このリスナーを削除するのを忘れ完了

NotificationCenter.default.addObserver(self, selector: #selector(listnerFunction), name: NSNotification.Name(rawValue: "notificationName"), object: nil) 

func listnerFunction() { 
    tableView.reloadData() 
} 

way

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: nil) 
1

特定のボタンがsecondVCが削除されるとfirstVCが戻って、すでにあなたを通知されたユーザになっタップされたときにケースが1であれば、あなたはこのためにデリゲートを作るか、または通知を発射することができます多くに。

+0

私はtableviewをリロードしたいだけですが、firstVCがロードされた後にしかそれを行うことができないので、私は呼び出すことができるので、secondVCが削除された直後に呼び出されるfirstVCの関数が必要ですtableview.reloadData() –

+0

はい、あなたはtableviewを呼び出すことができます。removeFromSuperview()を呼び出す前にreloadData()を呼び出すと、secondVCのfirstVCのインスタンスを取得するだけで、多くの方法でインスタンスfirstVCを取得できます。 firstVCInstance.tableview.reloadData() –

1

これはUIViewController documentationに記載されています。それは一定の責任を持つように

あなたfirstVcは、コンテナビューコントローラです:

あなたのコンテナビューコントローラは、ビュー階層に子のルートビューを追加する前に、自分自身と子ビューコントローラを関連付ける必要があります。これにより、iOSはイベントを子ビューコントローラとそのコントローラが管理するビューに適切にルーティングできます。同様に、ビューの階層から子ビューのルートビューを削除した後は、子ビューコントローラ自体を切断する必要があります。これらの関連付けを作成または中断するために、コンテナは基本クラスによって定義された特定のメソッドを呼び出します。これらのメソッドは、コンテナクラスのクライアントから呼び出されることを意図していません。予想される包含動作を提供するためにコンテナの実装によってのみ使用されます。

あなたがサブビューを追加する前にdidMove(toParentViewControler:)を呼び出すことにより、第2のビューコントローラを追加していますが、サブビューを削除した後、あなたもremoveFromParentViewController()を呼び出す必要があるとき、あなたは正しいことをやっています。

これを行うと、viewDid/WillDisappearメソッドが呼び出されます。

関連する問題