3

PLIST から読み込まれるテーブルビューがあります...うまくいきます。画面上部の「+」アイコンを押して、テキスト フィールドを含む詳細ビューを表示します...テキスト フィールドにデータを入力し、ボタンを押して書き込みますdata to PLIST ... PList が更新されたので、次の行を使用してビューをポップします: (これは DetailView.m で行っています)

[self.navigationController popToRootViewControllerAnimated:YES];

私がやろうとしていることから推奨された2つの方法があります:

- (void) navigationController:(UINavigationController *) navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

    [self.tableView reloadData];

}

-(void) navigationController:(UINavigationController *) navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    [self.tableView reloadData];
}

これらはリターン時に起動するメソッドであると言われました。デバッグで実行しましたが、リターン時に起動しません。何か不足していますか? できれば助けてください。締め切りが迫っています。助けていただければ幸いです。

4

3 に答える 3

1

問題は、「rootViewController」をのデリゲートとして設定しなかったことだと思いますUINavigationController

これを行うには、「ルート ビュー コントローラー」クラスをUINavigationControllerDelegateプロトコルに準拠させる必要があります。そのようです:

.h ファイル内:

@interface MyViewController : UIViewController <UINavigationControllerDelegate>

そして、.m ファイルでUINavigationControllerDelegateメソッドを実装する必要があります (すでに持っています)。

最後に、クラスのどこか (viewWillLoad メソッドや viewDidLoad メソッドなど) で、次のように Navigation Controller デリゲートとして設定する必要があります。

self.myNavigationController.delegate = self;

私はあなたのコードについていくつかの仮定をしています。さらに投稿するとすぐに、回答を更新します。

お役に立てれば!

于 2013-06-11T21:10:25.777 に答える
0

これらのナビゲーション デリゲート メソッドはまったく必要ないと思います。代わりに、テーブルを含むビュー コントローラーで、viewWillAppear でデータを再読み込みします。

// MyTableContainingViewController.m

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    [self.tableView reloadData];
}

ビュー コントローラーが UITableViewController のサブクラスである場合、ビューが初めて読み込まれるときにリロードが実行されるため、私の提案では、最初に余分な reloadData が生成されます。それを手放すか、次のように修飾することができます...

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    if (![self isBeingPresented]) {
        [self.tableView reloadData];
    }
}
于 2013-06-12T02:36:10.857 に答える
0

「Master-Detail」セットアップを使用しているようです。その場合、iPad では masterViewcontroller と detailViewcontroller が同じナビゲーション コントローラーに接続されていないため、リストした 2 つの UINavigationControllerDelegate メソッドは機能しません。ただし、セットアップで同じナビゲーションコントローラーにそれらがある場合は、テーブルをリロードするビューコントローラーの viewDidLoad メソッド (masterVC) に追加する必要があります。

    self.navigationController.delegate = self;

次に、それぞれの .h ファイルで、次のようなことを行う必要があります。

    @interface MasterViewController : UIViewController<UINavigationControllerDelegate>
于 2013-06-12T02:17:01.377 に答える