0

iOS メール アプリと同様に動作する Xcode の UI のセットアップに取り組んできましたが、2 番目のポップオーバー ビュー コントローラーがうまく機能しません。「トランザクション」ナビゲーション バーのタイトルをアカウントの名前に設定しようとしていますが、代わりに DetailViewController のタイトルを設定します。

アカウントを選択する前に: http://i.stack.imgur.com/zo75V.png

そして、「新しいアカウント」を選択した後: http://i.stack.imgur.com/8DPBB.png

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    Account *account = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    self.transactionViewController.navigationItem.title = account.name;
}

上記のコードを使用してタイトルを設定しましたが、タイトルが間違った viewController に設定されています... この同じコードは、iPhone バージョンではまったく結果を生成しません。

編集:私は実際にこのガイドでこれに対する答えを見つけました:ビューコントローラー間でデータを渡す

重要なのは、-prepareForSegue:sender:メソッドを使用して適切な viewController を取得し、そのタイトルを設定することです。これにより、セグエを使用してそれらを切り替えるたびに、あるViewControllerから別のViewControllerにデータを渡すこともできます。これを使用して、トランザクションのアカウントを設定し、seque.destinationViewController.navigationItem.titleプロパティに設定するアカウント名を取得します

ご協力ありがとうございました

4

2 に答える 2

2

ですself.navigationItem.title = account.name;。よく見ると、テーブルは の中にMasterViewControllerあり、マスターにはルートとしてナビゲーション コントローラーがあります。

于 2013-07-16T21:10:39.380 に答える
2

すべてのビュー コントローラーにはnavigationItemプロパティがあり、すべてのナビゲーション アイテムにはtitleプロパティがあります。ビュー コントローラのナビゲーション バーに表示されるタイトルを設定するには、現在行っているようにビュー コントローラの を設定するnavigationItem.titleだけです。

上記のコードを使用してタイトルを設定しましたが、タイトルが間違ったviewControllerに設定されています

タイトルを正しく設定しているように聞こえますが、間違ったビュー コントローラーのタイトルを設定している可能性があります。質問で言及した-tableView:didSelectRowAtIndexPath:メソッドは、「マスター」View Controller、つまり画面の左側にあるメソッドであり、そのtransactionViewControllerプロパティは「詳細」View Controllerを指しているようです。あなたのコメントから、「マスター」側で新しいView Controllerを作成し、それをナビゲーションスタックにプッシュしていると思います。タイトルを「New Account」にしたいのはそのView Controllerです(または、選択したアカウントの名前)。それがすべて正しい場合は、その navigationItem.title新しいコントローラーを作成し、適切な文字列に設定するコード内の場所を探す必要があります。

重要な質問の 1 つは、新しいビュー コントローラーのタイトルを設定しようとしているオブジェクトは何かということです。上記のコードでは、親コントローラーから実行しようとしています。ストーリーボードを使用しており、新しいビュー コントローラーがセグエによって作成されているため、メソッドから新しいビュー コントローラーに簡単にアクセスすることはできません...didSelectRowAtIndexPath...。親に引き続きタイトルを設定したい場合は、タイトルを-prepareForSegue:sender:設定するように実装できます。一方、View Controller は、多かれ少なかれそれ自体の表示方法を担当する必要があるため、親にそれをさせる代わりに、子 View Controller に独自のタイトルを設定させることを検討することができます。親はおそらく-prepareForSegue:sender:、子View Controllerでアカウントを設定するためにすでに使用しています。多分子供はaccountこの情報を設定するために親が呼び出すプロパティ? そのプロパティのセッターを実装して、View Controller のタイトルを設定できます。

- (void)setAccount:(Account*)account
{
    if (account != _account) {
        _account = account;
        self.navigationItem.title = account.name;
    }
}
于 2013-07-16T21:02:29.763 に答える