0

このストーリーボード テスト プロジェクトについて 2 つの質問があります。私は Xcode を初めて使用しますが、この問題の解決策が見つかりません。

これはストーリーボードのセットアップです

ビュー コントローラー A はルート ビュー コントローラーです。ビュー B とビュー C は、そこから別々に拡張されます。Table View は View C から拡張されます。View B には 2 つのボタンがあります - To Table View と View B です。

1) ボタン To Table View は、Table View を押します。表のセルに文字列が含まれています。セルを押すと、view は View Controller C に戻り、その文字列が text Field に表示されます。

問題 1: テーブル ビューからビュー C にモーダル セグエを使用すると、メソッド prepareForSegue で textField が更新されますが、ビュー C のナビゲーション バーが失われます。

問題2:テーブルビューからビューCへのプッシュセグエを使用すると、ビューCの戻るボタンはビューAを指さず、テーブルビューを指します。

解決?テキストフィールドをクリックして選択し、戻るボタンを押してビュー C を更新します。しかし、どのように実装するのでしょうか?

または、より良い解決策はありますか?

2) ビュー C のボタンを押してビュー B に移動します。プッシュ セグエを使用すると、ビュー B の [戻る] ボタンがビュー C を指します。モーダル プッシュを使用すると、ビュー B はナビゲーション バーを失います。

戻るボタンがビューAを指しているということで、ビューBにセグエをプッシュすることはできますか?

[編集]

ビューコントローラー間でデータを渡すために、NSUserDefaults を使用しました。ビュー間で単純なデータ(文字列、数値など)を渡す非常に効率的な方法であることが判明しました

MODAL セグエに使用するのは難しいですか? 目的の tableViewController に追加します

-(void)tableview:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   //define user defaults
   NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
   NSString *testString = @"test";
   [defaults setObject:testString] forKey:@"test1"];
   [defaults synchronize];

   //dismiss ViewController
   [self dismissViewControllerAnimated:YES completion:nil]; }

プッシュセグエを使用してView Controllerを閉じ、ナビゲーションシーケンスをスキップする(シーケンスからビューを削除する)場合は、置き換えます

   [self dismissViewControllerAnimated:YES completion:nil];

   [self.navigationController popViewControllerAnimated:YES];
4

1 に答える 1

0

各問題を解決するたびに、この回答を更新します。

選択を行う手段としてテーブル ビューを使用している場合は、新しいビューをモーダルにプッシュする代わりに、テーブル ビュー コントローラーを破棄する必要があります。

//In the table view controller's on cell selected method
[self dismissViewControllerAnimated:YES completion:^{
    //code
}];

ビューをプッシュすると、ビュー C からビュー A に戻りたい場合、次のビューが一番上に配置されます (モーダルで提示した場合)。上記と同じコードを使用して、C から A に戻ることができます。

基本的にこの場合:

View A --modal-> View C --modal-> TableViewController

次に、上記のコードを TableViewController で 1 回呼び出し、ViewController C でもう一度呼び出して、A に戻る必要があります。

B が A を指すようにする限り、A から B に移動する方が簡単ですが、A から BI に移動する必要がない場合は、構造を変更することをお勧めします。

しかし、要求を満たすために、ビュー階層を切り替える 1 つの方法は、ビュー C を閉じると同時に、A の上に B をプッシュすることです。

//Inside View C If you want it to happen only after the first animation completes just move the other line up into the block
[self dismissViewControllerAnimated:YES completion:^{
    //code
}];
[self.parentViewController.navigationController pushViewController:<#(UIViewController *)#> animated:YES];

これがお役に立てば幸いです。

于 2013-11-13T23:03:38.340 に答える