2

によって提供される新機能を使用して、アプリの設定セクションを再構築することを検討していますstoryboards。この時点でアプリの残りの部分に触れたくないので、私のメインNIBは残ります。

これで、NIB'edtabBarから別のedに移動するときに、IBのにaをNIB追加し、そのタブが押されたときにロードするプロパティにプロパティを設定します。viewControllertabBarNIB NameNIB

しかし、私が見ることができる「ストーリーボード名」プロパティがないので、これはどのように行われますか?

4

1 に答える 1

3

現時点では「公式」な方法はありませんが、いくつかのトリックを使用して行うことができます。

1)通常の方法で、ビューコントローラをペン先のタブバーに追加します。ペン先フィールドは空のままにします。

2)ストーリーボードを作成し、ビューコントローラーを追加します。クラスを設定し、ストーリーボードIDを設定します(この例では「theID」を使用します)

3)実装またはインターフェースの外部で静的bool変数を.mファイルに追加します

static BOOL aFlag = NO;

4)viewcontrollerクラスでこのメソッドをオーバーライドします。

- (id) awakeAfterUsingCoder:(NSCoder *)aDecoder
{
    if (!aFlag){
        aFlag = YES;
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
        return [storyboard instantiateViewControllerWithIdentifier:@"theID"];
    } else {
        return self;
    }
}

基本的に:

  • タブバーのペン先からオブジェクトをロードすると、「initWithCoder」への最初の呼び出しが行われ、オブジェクトはペン先なしでロードされます
  • initWithCoderの後、awakeAfterUsingCoderが呼び出され、そこでオブジェクトをストーリーボードからロードされた別のオブジェクトに置き換えます。同じクラスのオブジェクトですが、ストーリーボードにアーカイブされています
  • ストーリーボードからオブジェクトをロードするときに、initWithCoderとawakeAfterUsingCoderの両方をもう一度呼び出します。フラグを使用してループを回避し、自己を返します(2回目の呼び出しでは、オブジェクトはストーリーボードから読み込まれるため、自己を返すことは問題ありません)

私は試しましたが、うまくいきました;-)必要に応じて、プロジェクトの例を示します:http ://www.lombax.it/files/testTabNib.zip

于 2012-11-11T20:52:32.920 に答える