10

私はここでペドロと同じ問題を抱えていますが、答えに満足していません。すでに報奨金があり、報われているので、この質問を作成しました。できるだけ早く報奨金を追加します。

マスタービューが(赤で強調表示されている)のいくつかのサブクラスのいずれかになるように、コードでセグエ(黄色で強調表示されている)を作成または操作したいと思いますMFMasterViewController

絵コンテイラスト

Nibsを使用してこれを行う場合、Nibを作成しSharedNib.xib、クラスをに設定してMFMasterViewControllerから、サブクラスを作成します。たとえば MFMasterViewControllerSubclassAMFMasterViewControllerSubclassB 使用したいサブクラスをインスタンス化します...

MFMasterViewControllerSubclassA *controller = [[MFMasterViewControllerSubclassA alloc] initWithNibName:@"SharedNib" bundle:nil];

また...

MFMasterViewControllerSubclassB *controller = [[MFMasterViewControllerSubclassB alloc] initWithNibName:@"SharedNib" bundle:nil];

ストーリーボードを使用してこれを正しく行う方法についての手がかりはありますか?

Pedroの質問に対して提供された回答を使用できません。私のサブクラス化は、データソースとデリゲートを超えています。

4

2 に答える 2

0

接続されていないビューコントローラをストーリーボードに追加して、それらに識別子を与えることができます。次に、コードで、ナビゲーションコントローラーサブクラスで次のようなことを行うことができます。

MFMasterViewControllerSubclassA *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SubclassA"];
self.viewControllers = @[controller];

これにより、ナビゲーションコントローラーのルートビューコントローラーがコントローラーに変更されます。変更をアニメーション化する場合は、2行目の代わりにsetViewControllers:animated:を使用できます。

于 2012-11-28T19:16:21.990 に答える
0

これが古い投稿であることは知っていますが、まだ回答が得られていないので回答したいと思いました。これは難しくありません。スーパークラスを参照したい場合は、適切なサブクラスで参照してください。サブクラスには、スーパークラスの機能がすべて含まれています。セグエをどのように行うかによって、これを行う方法はいくつかあります。prepareForSegue を使用している場合は、次のようにします。

  1. ボタンなどからセグエを作成します。
  2. それにIDを割り当てます
  3. サブクラスを .m ファイルにインポートする
  4. prepareForSegue で次のことを行います。

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
       {
          if ([segue.identifier isEqualToString:@"YourID"]) {
                SubclassA *subA = segue.destinationViewController; // the file's owner in the storyboard is set to the super class
                subA.someString = @"subclass A is setting this";
            }
       }
    

ストーリーボード シーンを共有していて、シーンのサブクラスがないため、これはかなり制限されています。たとえば、要素を非表示にしてから、特定のサブクラスを使用してインスタンス化された場合は再表示する必要があります。これを行う別の方法は、セグエの開始元に応じて 1 つのクラスにブール値を設定し、条件付きコードを記述することです。この後者の方法は、少しコードの臭いと見なされるかもしれませんが、おそらく本当に悪い考えであるストーリーボードを複製するよりはましです。

于 2014-05-22T14:54:26.330 に答える