0

私はまだこの転送を以下の構造で把握していません。私は多くの投稿を読み、他の人による同じ未回答の投稿を見ましたが、解決策はありません.

すべての人にとって簡単にするために、質問を単純化しようとします。

プロジェクトの構造は次のとおりです。tab1 と tab2 を含む UITabbar

Tab1 には Nav コントローラーがあります --> ViewController1

Tab2 には Nav コントローラーがあります -->ViewController2

viewcontroller1 (tab1) にはオブジェクト X があります。

ViewCONtroller2 (tab2) でオブジェクト X を表示したい。

表示について心配する必要はありません。それは簡単な部分です。

ここに画像の説明を入力

質問: どのようにオブジェクト X を tab1 から tab2 に渡しますか? (一般的なパターンは何ですか)。

prepareForSegue を使用して実行したい場合は、これで問題ありませんか、それとももっと良い方法がありますか。

prepareForSegue を使用している場合、セグエをどこにドラッグしますか?

  1. タブバーコントローラー

    ここに画像の説明を入力

または***** 2. 2 番目の VC へ ここに画像の説明を入力

うまくいけば、これは十分に明確です。これを念頭に置いて、転送をどのように実行しますか?

セグエ1の使用: ここに画像の説明を入力

私はこれをやってみました:

//(From View controller 1)

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
    if ([segue.identifier isEqualToString:@"CreateObjectXToDisplayObjectX"])

            ViewController2* vc2 = [[ViewController2 alloc] init];
            UITabBarController* tbc = [segue destinationViewController];
            vc2 = (ViewController2 *)[[tbc customizableViewControllers] objectAtIndex:1];
    //Crash here with with [MainNavigationControllerDesign setViewController1Delegate:]: unrecognized selector sent to instance 0x1064ef70'
            vc2.viewController1Delegate=self;
            vc2.objectXAtViewController2 = _objectXFromViewController1;
        }
    }

では、この Object X の転送はどのように行われるのでしょうか? 前もって感謝します

4

1 に答える 1

1

このようにセグエを使用したくありません。セグエに移動すると、常に新しいコントローラーがインスタンス化されますが、これらのコントローラーは既にタブ バー コントローラーに埋め込まれています。これをコードで設定する場合は、デリゲートを使用するといいでしょうが、IB で設定すると、それが難しくなります。VC2 から、self.tabBarController.viewControllers[0] を使用して VC1 のナビゲーション コントローラーへの参照を取得できます。VC1 はそのナビゲーション コントローラーの topViewController になるため、それをまとめてキャストを追加すると、次のように VC1 にアクセスできます。

ViewController1 *vc1 = (ViewController1 *)[self.tabBarController.viewControllers[0] topViewController];

その参照を取得したら、vc1 の任意のプロパティにアクセスできます。ViewController1.h を ViewController2 の .m ファイルにインポートすることを忘れないでください。

于 2013-01-17T16:39:59.720 に答える