0

これが事です。現在、いくつかのナビゲーション コントローラーを含む tabBar コントローラーがあります。ちょうどこのような :

http://tof.canardpc.com/view/d27d1361-c81b-43a0-9b5b-abb13d78e422.jpg

私の最初のナビゲーション コントローラーには、NewsViewsController というビュー コントローラーがあります。これがそのニブです(写真を参照)。

私の目標は、セグメント化されたコントロールの位置に応じて、サブビュー (テーブルビューを含む) を表示/非表示にすることです。このようにして、テーブルビューごとに 2 つの別個の viewController を持つことができます。これは実際に機能しています。そして、これが結果です(写真を参照)。

私の問題は次の問題です。セルをクリックしようとすると、プッシュビューが機能しません。実際、私の self.navigationController は null です。親ナビゲーション コントローラーを使用して詳細ビューをプッシュするにはどうすればよいですか?

アプリケーションのアーキテクチャが間違っていますか? ありがとうございます=)

4

2 に答える 2

0

ナビゲーション コントローラーは、ビュー全体を管理するビュー コントローラーをプッシュおよびポップするように設定されています。同じスーパービュー内にビューが表示される複数のビュー コントローラーを簡単にサポートする API はありません。

tableview サブビューの 1 つで次のビューをプッシュしようとする代わりに、"News View" コントローラーからナビゲーションを管理する必要があります。さらに良いことに、「News View」コントローラーだけを用意し、各テーブルのデリゲートとデータソースを実装する個別のクラスを用意する必要があります (ビュー コントローラー内にある必要はなく、通常は便利です)。

このようなもの:

@interface NewsViewController {
    CustomClass1 *newsTableDelegateAndDataSource;
    CustomClass2 *categoryTableDelegateAndDataSource;
}

@interface CustomClass1 {
    UINavigationController *nav;
}

NewsViewController.m 内

- (void) viewWillAppear{
    self.newsTableDelegateAndDataSource.nav= // reference to the navigation controller;
    self.categoryTableDelegateAndDataSource.nav = // reference to the navigation controller;
}

次に、いずれかの CustomClasses の didSelectRow メソッドで:

nextViewController=// intialize or get reference to next view controller
[self.nav pushViewController:nextViewController animated:YES];

nav は、nextViewController を NewsViewController の上にプッシュし、新しい画面を表示します。完了すると、それ自体がポップし、NewsViewController が元の状態で再表示されます。

この方法では、いつでも 1 つの View Controller のみをアクティブにできるため、API はスムーズに動作しますが、各テーブルの動作は独自のクラスにカプセル化されます。

誰もが幸せです。

于 2010-04-04T15:12:46.847 に答える
0

サブビューから親メソッドを呼び出すことでこれを達成しました - 親メソッドはプッシュを実行します。

サブビュー:

@protocol SubUIViewDelegate
    -(void)pushViewController:(UIViewController*)ctrl;
@end

@interface ... {
   ...
   id<SubUIViewDelegate> delegate;
}
@property (nonatomic,assign) id <SubUIViewDelegate> delegate;
...
@end

次にデリゲートを @synthesize し、以下を使用してサブビューからプッシュを呼び出します

[self.delegate pushViewController : new_view_ctrl];

親ビュー コントローラー:

@interface parentview : ... <SubUIViewDelegate> {
    ...
}
-(void) pushViewController: (UIViewController*) ctrl;

実装:

subview.delegate = self;

-(void)pushViewController:(UIViewController*)ctrl {
    [self.navigationController pushViewController:ctrl animated:YES];
}

お役に立てれば。

于 2011-12-10T13:19:41.170 に答える