如何从视图控制器返回到选项卡式视图控制器

How to come back from view controller to tabbed view controller

我在将视图控制器关闭到选项卡式视图控制器时遇到了问题。我会解释我的流程。

  1. 视图控制器到选项卡式视图控制器(推送)
  2. 我在 3 个选项卡中的选项卡式视图控制器中有 5 个选项卡我有一个来自他们的相机视图我正在展示视图控制器并使用此代码传递一些参数

       UIStoryboard *storybord=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
    
    shareViewController   *shareview=[storybord instantiateViewControllerWithIdentifier:@"share"];
    [self presentViewController:shareview animated:YES completion:nil];
    //shareview.finalvideourl=videoURL;
    shareview.videooutputstring=videoPath;
    
  3. 我想从共享视图控制器将数据发送回第一个选项卡为此我正在使用以下代码

    UIStoryboard *story=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
    TabedfirstViewController *Tabedfirst=[story instantiateViewControllerWithIdentifier:@"id"];
    
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:Tabedfirst];
    
    [self presentViewController: nc animated:YES completion:^{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"ShareArray" object:_selectedimgarray];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"SharetitleArray" object:_newtile];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"sharevideooutputstring" object:_videooutputstring];
    }];
    

当我做这件事时效果很好,我将数据从共享视图发送到选项卡式视图并打印它。

问题是当我将第二次数据从共享 viewcontroller 发送到选项卡式视图控制器时,第一个数据正在删除,第二个传递的数据正在替换第一个数据,即我在一个数组中有 15 个对象,从共享视图控制器,我将数组传递给选项卡式视图控制器,现在数组计数为 16,我正在打印它,现在我再次将另一个对象从共享视图传递到选项卡式视图,数组计数必须增加到 17,但它是 16只有.

我不确定您为什么要使用主故事板创建新的故事板。您所要做的就是 presentViewController 从一个 viewcontroller 您想要 return 从那个 viewcontroller 的 segue 的 id 返回到选项卡式视图控制器的根。在您的情节提要中,按住 ctrl 并从按钮(或触发 segue 的任何内容)拖动并将其拖动到选项卡视图控制器的根目录。 Select segue 并在属性编辑器中给它一个 id。然后在 viewcontroller 中使用 id 调用 presentViewcontroller,它应该可以正常工作。

在 App 委托中 add/make 您数组的属性,如

 @property (nonatomic, retain) NSMutableArray *array1;

在AppDelegate.m启动你所有的属性

之后,在您存储值的控制器中添加 AppDelegate 实例作为

- (void)viewDidLoad
 {
  [super viewDidLoad];
   objAppDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
  objAppDelegate.array1= _imagearray=[@[@"bootimages",@"fall-photography-in-hocking-hills", @"gift",@"hillimages",@"Mercedes-classe-S-W116_large_dettaglio_articolo",@"prini‌​mages",@"resplendent",@"tnb4",@"Tomato-plant",@"Vole",@"waterimages",@"fall-photo‌​graphy-in-hocking-hills", @"gift",@"hillimages",@"Mercedes-classe-S-W116_large_dettaglio_articolo"]mutable‌​Copy];

然后

[objAppDelegate.array1 insertObject:[userInfo firstObject] atIndex:0];

这些值得到维护,可以在整个项目的任何地方使用。如果您的对象数量不断增加,那么您可以使用 NSMutableDictionary 并根据需要添加尽可能多的 key/value 对。

在shareViewcontroller.h写入添加如下方法

@protocol childDelegate <NSObject>
 -(void) sendImage:(UIImage *)img
@end

和属性

@property (assign) id <childDelegate> cDelegate;

一旦你在你有方法的控制器上完成了这个

-(void) receivedArray:(NSNotification*)notification

添加方法

-(void) sendImage:(UIImage *)img
{
 // Add image to app.array1 here.
}

在将图像发送到最后一个控制器的共享视图控制器中调用此方法

[self.cDelegate sendImage:"your image comes here"];

如果您仍然遇到问题,请参考How do I set up a simple delegate to communicate between two view controllers?

如果您仍然遇到问题,请告诉我。