6

私のプロジェクトの1つとしてストーリーボードを試してみましたが、私は良い解決策がない何かを見つけました。Storyboardsでモーダルビューコントローラを閉じる前にviewControllerをプッシュするにはどうすればよいですか?

私はUITableViewControllerを示すナビゲーションベースのアプリケーションを持っています。 tableViewにはユーザーが作成した要素が設定されています。要素セルをタップすると、詳細ビ​​ューコントローラが表示されます。ユーザーは、tableView内のボタンをタップすることで新しい要素を作成できます。これは、作成を処理するモーダルビューを表示します。

ユーザーが要素の作成を完了し、モーダルビューコントローラを閉じると、ユーザーは対応する新しい詳細ビューコントローラを表示し、テーブルビューは表示しないようにします。しかし、私はストーリーボードでこれを達成する方法を理解できません。

誰かがこれに対して良いパターンを持っていますか?

現状

TableView --(tap create)--> creation modal view --(finish creating)--> TableView 

TableView --(tap create)--> creation modal view --(finish creating)--> detail view 
+0

下記の独自の回答を追加しました。ストーリーボードでこれを行う可能性のあるより良いパターンはまだ評価されています。 – SpacyRicochet

答えて

0

私が思い付くことができる最高のパターンであるべき、コード内の古いパターンと同じです。

モーダルビューコントローラにプロパティ(nonatomic, weak) UINavigationController *sourceNavigationControllerを追加します。それはモーダルビューコントローラを却下する時間になると、次のコードを追加します。

DetailViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
detailViewController.element = newlyCreatedElement; 
[[self sourceNavigationController] pushViewController:detailViewController animated:NO]; 

をそしてsourceNavigationControllerが正しく設定され得ることを確認するために、テーブルビューのprepareForSegue:に次のコードを追加します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"newElementSegue"]) { 
     [[segue destinationViewController] setSourceNavigationController:self.navigationController]; 
    } 
} 
1

作成ビューコントローラをナビゲーションコントローラに配置し、作成ビューコントローラと詳細ビューコントローラをプッシュセグでリンクすることができます。データの作成が終了すると、詳細ビ​​ューコントローラのインスタンスに転送されます。

詳細ビューからテーブルビューに直接戻る場合は、詳細ビューコントローラにプロパティを追加できます(@property (nonatomic) BOOL cameFromCreationViewController;)。このプロパティは、ソースビューコントローラのprepareForSegue:に設定できます。詳細ビューでは、自分の戻るボタンを作成し、タップしたら、これを行うことができます:

if(self.cameFromCreationViewController){ 
    [self.presentingViewController dismissViewController]; 
} 
else { 
    [self.navigationController popViewController] 
} 
関連する問題