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

时间:2016-08-05 04:26:24

标签: ios objective-c nsnotificationcenter presentviewcontroller

我有一个问题是解除了视图控制器的视图控制器。我会解释我的流程。

  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. 来自共享视图控制器的
  4. 我想将数据发送回第一个标签,我使用下面的代码

    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];
    }];
    
  5. 当我这样做时,我正在将数据从共享视图发送到选项卡视图,我正在打印它。

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在App委托中添加/ make属性,如

- (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];

在AppDelegate.m中启动所有属性

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

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

然后

str == "PALS español K- add-o"

值保持不变,可以在整个项目的任何地方使用。如果您的对象数量不断增加,那么您可以使用NSMutableDictionary并添加任意数量的键/值对。

答案 2 :(得分:0)

在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?

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