1

私は私が設定したと思うし始めている...ナビゲーションコントローラ階層に戻るときにviewWillAppearをトリガする方法は?

// HomeViewController.m 
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    NSLog(@"trigger 1"); 
} 

- (void)viewWillAppear:(BOOL)animated { 
    NSLog(@"trigger 2"); 
} 

-(void) viewDidAppear:(BOOL)animated { 
    NSLog(@"trigger 3"); 
} 

をUINavigationControllerの最初のレベルに戻ったときにいくつかのコードをトリガするためにさまざまな方法を試していないが、以下の作業のどれもしてきました私のアプリは間違って..それはUIViewControllers内にUIViewControllersを持っていることについては何ですか?

これはアプリのペン先です。各タブ用のナビゲーションコントローラを備え、UINavigationControllerの最初のページにあるUITabBarControllerです。この設定は、メソッドがトリガーしていない理由ですか?この中には示されていない

alt text

は、ファイルの所有者のビューにリンクされている一番下にUIViewのです。さらに複雑にするために、MainViewControllerは実際にユーティリティスタイルのアプリの裏側です。

答えて

0

私はこれを別の方法で解決しました。私はviewWillAppearのようなものを呼び出す必要がありました。なぜなら、第2のビューで何かが変わったときに私の最初のビューテーブルを更新する必要があったからです。

私はそれは、私の「のtableView:commitEditingStyle」にして達成方法方法、私は最後にこれを置く(私が何かを削除した後に呼ばれる)。..

[[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] reloadTheTable]; 

reloadTheTableは私HomeViewControllerのメソッドであります更新配列や[tableView reloadData]などのようなものはありません。

これは大括弧です。私はそれをよりシンプルにするためにペン先を設定できると確信しています。私はカスパロフが4つの動きを先に考えていると言っていると思います...そして4つの括弧が私の限界です。

私はこのようなことをやってそれを働いた:

NSString *name = NSStringFromClass ([[self parentViewController] class]); 
NSLog(@"%@", name); // outputs UINavigationController 

、ゆっくりと私は私が探していたものを見つけるまで、それに追加する:

name = NSStringFromClass ([[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] class]); //UINavigationController 
NSLog(@"%@", name); // outputs HomeViewController 

間違いなく奇妙な何かが道にありviewWillAppearは、ビューをビュー内に置くと取り消されます。

+0

これはいつ呼び出されましたか?既存のView Controllerをポップする前に? –

関連する問題