0

UITextFields とスイッチの 1 つの長いスクロール画面ではなく、4 つの論理セクションに入力するデータ量を分割するために、テーブル ビューとタブ バー コントローラーを使用するようにアプリのユーザー インターフェイスをやり直しています。

以前は、prepareForSegue で次のコードを使用して、新しいビュー コントローラーに新しいマネージド オブジェクトを渡していました。

  if ([[segue identifier ] isEqualToString:@"addDiveSite"]) {
    //
    UINavigationController *navController = segue.destinationViewController;

    AddEditDiveSiteViewController *adsvc = (AddEditDiveSiteViewController *) navController.topViewController;

    adsvc.navigationItem.title=@"Add Site";

ビュー コントローラーはナビゲーション コントローラーに組み込まれており、画面が 1 つしかないため、topviewcontroller を要求して取得します。

タブ バー コントローラーを使用すると、データを入力するための 4 つの画面が表示されます。

代用できることがわかりました:

 if ([[segue identifier] isEqualToString:@"addDiveSite"]){

    UITabBarController *tabController =segue.destinationViewController  ;

    AddEditDiveSiteViewController *adsvc =(AddEditDiveSiteViewController *)[[tabController customizableViewControllers] objectAtIndex:0];


DiveSite *newDiveSite =(DiveSite*) [NSEntityDescription insertNewObjectForEntityForName:@"DiveSite" inManagedObjectContext:[self managedObjectContext]];

    adsvc.currentSite = newDiveSite;

しかし、4 つのタブの 1 つのプロパティに渡されたデータだけが残り、4 つすべてでアクセスする必要があります。

正しいアプローチは、これの4つのバリアントを持つことになります:

       AddEditDiveSiteViewController *adsvc =(AddEditDiveSiteViewController *)[[tabController customizableViewControllers] objectAtIndex:0];

インデックスの 4 つのタブ/オブジェクトのそれぞれに 1 つですか?

または、UITabBarController をサブクラス化し、データを渡すプロパティを与えることを検討する必要があります。そうであれば、「親」UITabBarController からプロパティを取得するための形式は何ですか?

または、まったく異なるアプローチがありますか?

時間を割いて読んでくれたり、返信してくれてありがとう

編集

最後に、うまくいくように見える次のアプローチに行きました

ビュー 2、3、および 4 については、ビューが含まれている UITabBarController を取得し、そのコントローラーの配列を取得します。次に、配列の最初の項目を取得し、アクセスする必要があるそのプロパティへのポインターを作成します。

何を探すべきかを知っているときだけです。

これが誰かを助けることを願っています

4

0 に答える 0