Ios 在解除ModalViewController时返回到ViewController,而不是ParentViewController

Ios 在解除ModalViewController时返回到ViewController,而不是ParentViewController,ios,delegates,hierarchy,uistoryboard,uistoryboardsegue,Ios,Delegates,Hierarchy,Uistoryboard,Uistoryboardsegue,首先,看一下我的故事板的屏幕截图: 这是一个声音地图的应用程序。用户可以录制新的字段录制,也可以从库中选择现有字段并上载。用户必须在其中添加标题/说明等(或从库中修改标题/说明)的ViewController以模式显示(在右上角) 如果用户选择取消此操作并删除记录,则应返回记录屏幕,如果他来自该屏幕,则应返回图书馆。如果他选择保存/上传录音,他应返回图书馆,在那里将显示上传进度 如何独立于来自的ParentViewController返回所需的ViewController? 我曾考虑过unwi

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

这是一个声音地图的应用程序。用户可以录制新的字段录制,也可以从库中选择现有字段并上载。用户必须在其中添加标题/说明等(或从库中修改标题/说明)的ViewController以模式显示(在右上角)

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

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

我曾考虑过unwindSegue,但这对我的布局不起作用。然后我想出了一个肮脏的解决办法,在那里我更改了TabBarController的选定选项卡。但是,我还希望正确设置委托以传递一些数据


欢迎有任何想法

我不认为更改选项卡栏控制器的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];
}

在我的示例中,我只有两个按钮可以保存或取消,我的TableController与您的库控制器相同。

谢谢,现在可以正常工作了!选项卡栏的选择对我来说似乎太…硬编码了。多亏了你,现在一切都清楚多了!EntryViewController现在是EntryDetailViewController的代理,正如您所建议的那样,我可以从任何一种来源(使用一个展开序列)将其取消。