如何从推送到的View Controller将信息传输回View Controller?

时间:2013-12-11 14:41:13

标签: ios iphone objective-c xcode uiviewcontroller

我正在开发我的第一个iOS应用程序,我一直在努力坚持良好的MVC实践,并制定了约定,使我的应用程序易于维护和重新开发。我正在使用Storyboard,在很大程度上我会使用Push segues来浏览我的应用程序。这是我的故事板的快照。

enter image description here

单击“添加人员”时,推送segue将移至“选择人员”。选择员工后,我选择了我想要的员工,然后可以返回上一个VC。我应该提一下,每个VC都有自己的.m.h,我从UIViewController继承了它。这是使用时的样子。

enter image description here

现在,我已经将选定的数据行传回第一个VC了。我的问题是我不知道如何最好地将数据从一个VC推送回VC。在Select Staff VC中,我有一个数组(currentSelected)正确保存所选行的字符串,但是我想在回滚后在Create VC中访问此数组。

我最好怎么做呢?

P.S。值得注意的是,我意识到这个问题存在类似的问题,但它们要么是针对略有不同的问题,要么稍微复杂,要么是旧版本的XCode,它们谈论的是XIB和东西。过去我一直在研究有关这个问题的文献而无法取得有效进展,所以我希望这能解释为什么我提出这个问题。

1 个答案:

答案 0 :(得分:4)

您可以使用阻止或委托。我个人推荐了一个块,因为你保持代码的逻辑分组。有了块,你必须做那样的事情。在SelectStaff.h文件中,在interface:

之前添加typedef
// I use NSString as an example but for your project more accurate would be NSArray
typedef void (^ReturnBlock)(NSString *arg);

在@interface之后但在@end之前添加属性:

@property(copy) ReturnBlock returnBlock;

在SelectStaff.m中有数据时(可能在你的保存:方法或解雇:) 使用您要传递的数据调用块;

if (returnBlock)
   returnBlock(@"Data will be passed do previous view controller");

在prepareForSegue的CreateViewController.m中:添加块:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"YOUR_IDENT_FROM_STORYBOARD"])
    {
        SelectStaff *selStuff = (SelectStaff*)[segue destinationViewController];
        [selStuff setReturnBlock:^(NSString *arg){
            // This are your data 
            NSLog(@"Arg: %@", arg);
        }];
    }
}

希望得到这个帮助。