在解雇ModalViewController时返回除ParentViewController之外的ViewController

时间:2013-07-04 21:43:56

标签: ios delegates hierarchy uistoryboard uistoryboardsegue

首先,看一下我的故事板的截图:

storyboard layout

它是声音地图的应用程序。用户可以记录新的现场记录或从库中选择现有记录并上传它们。用户必须添加标题/描述等(或从库中修改它们)的ViewController以模态方式呈现(在右上角)。

如果用户选择取消该录音并删除录音,他将返回录音屏幕,如果他来自那里,则应返回图书馆。如果他选择保存/上传录音,他将返回图书馆,在那里将显示上传进度。

如何独立于我来自的ParentViewController返回所需的ViewController?

我想到了unwindSegue,但这对我的布局不起作用。然后我想出了一个肮脏的解决方法,我更改了TabBarController的选定选项卡。但是我还想正确设置委托以传递一些数据。

欢迎任何想法!

1 个答案:

答案 0 :(得分:1)

我不认为更改选项卡栏控制器的selectedIndex是一个“脏的解决方法” - 这是设置的方法。您似乎希望EntryViewController(Library)成为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];
}

在我的例子中,我只有两个按钮来保存或取消,我的TableController与你的图书馆控制器相同。