3

まず第一に、コントローラーが正しい言葉であるかどうかはわかりません。私が達成したいのはこれです。

   @interface ClubViewController : CoreDataTableViewController :NRGridViewController
   {

これはObjective-Cでは不可能であることを私は知っています。しかし、これを回避する方法はありますか?CoreDateTableViewControllerとNRGridViewControllerを使用したいからです。

敬具

ステフ 編集

これが私のストーリーボード階層の外観です。

-ViewController
  -TableView
      -View
      -TableViewCell

だから私はテーブルビューコントローラーを持っていますが、このテーブルビューコントローラーの上に3つのボタンがある小さなビューがあります。ボタン1を押すと、テーブルビューが削除され、NRGridviewコントローラーでgridViewが描画されます。しかし、ボタン2と3を押すと、CoreDataTableViewControllerを使用してテーブルビューを埋めます。

これが私の問題をもっと説明してくれることを願っています。

4

3 に答える 3

2

これを行う1つの方法は、コンテナービューコントローラーを内部に持つコンテナービューを使用することだと思います。そのコンテナコントローラーには、CoreDateTableViewControllerとNRGridViewControllerの2つの子コントローラーがあります。私はこのようなものを実装しました、そしてあなたが興味を持っているなら私はあなたにいくつかのコードを示すことができます。

編集後:テストアプリでは、単一のビューテンプレートとストーリーボードから始めました。ビューの上部に2つのボタンを追加し、ビューの下半分にコンテナービューを追加しました(この最初のコントローラーはViewControllerクラスです)。次に、新しいビューコントローラーをドラッグアウトし、コントロールをコンテナービューから新しいコントローラーにドラッグして、「埋め込みセグエ」を選択しました(これにより、ビューのサイズがコンテナービューと同じサイズになります)。このコントローラーのクラスは、私のサブクラスであるContainerControllerに変更されました。次に、コンテナコントローラーによって管理される2つのビュー用にさらに2つのコントローラーを作成しました(コンテナービューと同じサイズに設定できるように、ビューのサイズをIBで「フリーフォーム」に設定する必要があります)。ContainerControllerのコードは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.cont1 = [[FirstController alloc]initWithNibName:@"FirstView" bundle:nil];
    self.cont2 = [[SecondController alloc]initWithNibName:@"SecondController" bundle:nil];
    [self addChildViewController:self.cont1];
    self.currentController = self.cont1;
    [self.view addSubview:self.cont1.view];
}

-(void)switchToFirst {
    if (self.currentController != self.cont1) {
        [self addChildViewController:self.cont1];
        [self moveToNewController:self.cont1];
    }
}

-(void)switchToSecond {
    if (self.currentController != self.cont2) {
        [self addChildViewController:self.cont2];
        [self moveToNewController:self.cont2];
    }
}

-(void)moveToNewController:(id) newController {
    [self.currentController willMoveToParentViewController:nil];
    [self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
                            completion:^(BOOL finished) {
                                [self.currentController removeFromParentViewController];
                                [newController didMoveToParentViewController:self];
                                self.currentController = newController;
                            }];
}

私がViewControllerに持っている唯一のコードは、ビューを切り替える2つのボタンのIBActionsです。これらのメソッドは、コンテナーコントローラーのメソッドを呼び出すだけです。

-(IBAction)chooseFirstController:(id)sender {
    [self.childViewControllers.lastObject switchToFirst];
}

-(IBAction)chooseSecondController:(id)sender {
    [self.childViewControllers.lastObject switchToSecond];
}
于 2012-10-12T04:19:48.387 に答える
0
  1. tableViewControllerを使用する代わりに、通常のTableViewを使用します(ストーリーボードからビューの特定の位置にドラッグアンドドロップします)。

  2. ボタン1が押されたときボタンアクションメソッドでテーブルビューを非表示にします。グリッドビューを初期化するか、非表示のグリッドビューをNOに設定します。(すべてのビューには、iOSに非表示にするプロパティがあります)

  3. 2番目と3番目のボタンを押すと、グリッドビューを非表示に設定し、テーブルビューを非表示に設定してNOに設定します。コアデータをフェッチして配列またはディクショナリに保存するか、テーブルビューをリロードできます。(最初は、ボタン2と3を押す前は、テーブルビューに値がありません。したがって、ボタン2または3を押したときにboolを設定し、boolを使用してタブビューをリロードするboolプロパティを設定できます)

あなたが私の説明を受け取らなかった場合は私にpingを返します。

于 2012-10-18T06:12:23.027 に答える
0

コードで実行しようとしているのは、他の複数のクラスのサブクラスであるクラスを作成することですが、これは不可能です。本当にこれを実行したい場合は、この質問を確認してください:2つのクラスから継承する

複数のインスタンスを作成しようとしている場合:CoreDataTableViewControllerとNRGridViewControllerは単なるクラスであり、実際のオブジェクトを取得するにはインスタンス化する必要があります。たとえば、NRGridViewControllerを使用してインスタンス化できます。

NRGridViewController *controller=[[NRGridViewController alloc] init];   

これがあなたの質問に答えることを願っています、あなたの質問を理解するのは少し難しいです。

于 2012-10-11T14:17:56.167 に答える