1

UINavigationControllerの最初のレベルに戻るときにいくつかのコードをトリガーするためにさまざまなメソッドを試してきましたが、以下のいずれも機能しません...

// 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");
}

私は自分のアプリを間違って設定したと思い始めています..それはUIViewControllers内にUIViewControllersを持っていることについての何かですか?

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

代替テキスト

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

4

1 に答える 1

0

私はこれを別の方法で解決したと言うだけです。2 番目のビューで何かが変更されたときに最初のビュー テーブルを更新する必要があったため、viewWillAppear などを呼び出す必要がありました。

私がそれを達成した方法は、「tableView: commitEditingStyle」メソッド (何かを削除した後に呼び出される) で、これを最後に置くことでした..

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

reloadTheTable は、配列の更新や [tableView reloadData] などを行う HomeViewController のメソッドです。

それはたくさんのブラケットです。私のペン先は、それをより簡単にするように設定できると確信しています. カスパロフは 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 がキャンセルされる方法には、明らかに奇妙なことがあります。

于 2010-11-22T00:22:29.697 に答える