0

まず、私のストーリーボードのこのスクリーンショットを見てください:

絵コンテのレイアウト

サウンドマップ用のアプリです。ユーザーは、新しいフィールド レコーディングを記録するか、ライブラリから既存のものを選択してアップロードすることができます。ユーザーがタイトル/説明などを追加する必要がある(またはライブラリから来るときにそれらを変更する)必要があるViewControllerは、モーダルで表示されます(右上)。

ユーザーがこれをキャンセルして録音を削除することを選択した場合、ユーザーは録音画面に戻り、そこから来た場合は録音画面に戻り、それ以外の場合はライブラリに戻ります。録音の保存/アップロードを選択した場合、ライブラリに戻り、アップロードの進行状況が表示されます。

元の ParentViewController とは無関係に、目的の ViewController に戻るにはどうすればよいですか?

unwindSegue について考えましたが、私のレイアウトではうまくいきません。次に、TabBarController の選択したタブを変更するという汚い回​​避策を見つけました。しかし、デリゲートを正しく設定してデータを渡すことも必要です。

どんな考えでも大歓迎です!

4

1 に答える 1

1

タブバーコントローラーのselectedIndexを変更することは「汚い回避策」ではないと思います-あなたの設定を考えると、それがそれを行う方法です。EntryViewController (ライブラリ) を EntryDetailViewController のデリゲートにする必要があるようです。その場合、次のように EntryDetailViewcontroller の viewDidLoad メソッドでデリゲートを設定できます。

#import "DetailViewController.h"
#import "TableController.h"

@interface DetailViewController ()
@property (strong,nonatomic) UITabBarController *tbc;
@end

@implementation DetailViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    self.tbc = (UITabBarController *)self.presentingViewController;
    self.delegate = (TableController *)[(UINavigationController *)self.tbc.viewControllers[1] topViewController];
}


- (IBAction)saveAndUpload:(UIButton *)sender {
    [self.tbc setSelectedIndex:1];
    [self.delegate saveRecording:@"test recording"];
    [self dismissViewControllerAnimated:YES completion:nil];
}


- (IBAction)delete:(UIButton *)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

私の例では、保存またはキャンセルするボタンが 2 つだけあり、私の TableController はライブラリ コントローラーと同じになります。

于 2013-07-05T05:34:46.870 に答える