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 を取得し、そのコントローラーの配列を取得します。次に、配列の最初の項目を取得し、アクセスする必要があるそのプロパティへのポインターを作成します。
何を探すべきかを知っているときだけです。
これが誰かを助けることを願っています