0

だから私は「TopNewsViewController」と呼ばれるViewControllerクラスを持っています。RootViewControllerからNavigationControllerスタックにプッシュされます。

TopNewsViewControllerに、ボタンをクリックすると表示されるポップオーバーがあります。PopOverからのテーブルビューが表示されます。

ここで、PopOverのメソッドtableView:didSelectRowAtIndexPathで、TopNewsViewControllerのいくつかのプロパティを変更し、ナビゲーションスタックに再プッシュする必要があります。私は次のようにメソッドを実装しています:

TopNewsViewController *topNewsViewController = [[[TopNewsViewController alloc] initWithNibName:@"TopNewsViewController" bundle:nil] autorelease];

NSString *feedStr = [rootViewController.feeds objectAtIndex:rowNumber];
[rootViewController release];
NSArray *thisFeed = [NSArray arrayWithObjects:feedStr, nil];
topNewsViewController.feeds = thisFeed;
topNewsViewController.pageTitle = [categories objectAtIndex:rowNumber];
[self.navigationController pushViewController:topNewsViewController animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];

PopOverがViewControllerではなく、代わりにUITableViewControllerである場合、「self.navigationController」を使用しているため、これが機能しないことに気付きました。代わりに「topNewsViewController.navigationController」を実行してみましたが、機能しませんでした。

誰かがそれを実装する方法について何か提案がありますか?ヘルプ/提案は大歓迎です!

4

1 に答える 1

1

私があなたを正しく理解しているなら、おそらくあなたの最善の策は、ポップオーバーのUITableViewControllerにデリゲートを実装することだと思います。これにより、レコードが選択されると、デリゲートメソッドが呼び出されて選択がRootViewControllerに返されます。RootViewControllerは、使用する新しいTopNewsViewControllerのプッシュとポップを処理します。ここで作成している新しいTopNewsViewControllerには、デフォルトでnavコントローラーがないため、機能しません。

したがって、ルートビューコントローラーはポップオーバービューコントローラーのデリゲートになります...行が選択されると、「popOver:didSelectRow:」と表示され、RootViewControllerはポップオーバーを閉じて「正しいことを行います」(tm)。

于 2011-04-13T23:18:31.983 に答える