2013-12-11 54 views
0

我正在开发我的第一个iOS应用程序,我一直试图坚持良好的MVC实践,并制定了约定,使我的应用程序易于维护和重新开发。我正在使用Storyboard,很大程度上我将使用Push segues来浏览我的应用程序。这是我的故事板的快照。如何通过View Controller将信息传回View Controller?

enter image description here

当增加员工被点击,一推SEGUE移动到选择员工。选择员工后,我选择我想要的员工并返回到之前的VC。我应该提到,每个VC都有它自己的.m.h,它们是我从UIViewController中分类的。这是使用时的样子。

enter image description here

现在,我已经在传输所选择的数据行回到第一个VC撞到南墙。我的问题是,我不知道如何最好地将数据传回给VC所推动的数据。在Select Staff VC中,我有一个数组(currentSelected),它可以正确保存所选行的字符串,但是我想在回滚后访问Create VC中的数组。

我该如何做到最好?

P.S.值得注意的是,我意识到这个问题存在类似的问题,但是它们或者只是稍微变化的问题,稍微复杂一些,或者是旧版本的XCode,它们讨论XIB和其他东西。过去,我一直在研究有关这个问题的文献,并且无法取得有效的进展,所以我希望这解释了为什么我提出这个问题。

回答

4

您可以使用块或委托。我个人推荐了一个区块,因为您可以保持代码的逻辑分组。用块你必须做那样的事情。在您的SelectStaff.h文件中添加类型定义界面前:

// 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); 
     }]; 
    } 
} 

希望这有助于。

+0

有没有一个API给我一个函数,在我放松到第一个VC之前会被调用?例如,我选择了我的输入项,然后单击后退按钮。但在VC解散之前,该函数被调用,我可以执行'if(returnBlock)...',然后VC被解雇。 –

+0

在您的CreateViewController中,您可以添加展开segue的方法,例如: - (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue {SelectStaff * selectStaff = unwindSegue.sourceViewController; }你可以读取你需要的数据,你甚至不需要阻止。只要记得从出口图标拖到故事板中的这个动作。 – Greg

+0

感谢您的建议,我很感激。我实现了你建议的代码,但是我有这个错误,有什么建议吗? http://i.imgur.com/UbLpbnU.png –

相关问题