如何将数据从一个视图传回到IOS中的其他视图?

vin*_*thp 4 iphone uiviewcontroller modalviewcontroller ios ios5

我可以毫无问题地将数据从一个视图传递到其他视图.但这是我面临问题的情况.

让我们说 - >将数据传递给其他视图

ViewA->ViewB This working perfectly fine 
ViewB->ViewC This working perfectly fine
ViewC->ViewB Here is the problem.
Run Code Online (Sandbox Code Playgroud)

我尝试使用push segue,它转到ViewB但是当我按下后退按钮时它转到ViewC->后退按钮 - > ViewB->后退按钮 - >视图A.当我按下后退按钮时,它必须转到ViewA.

尝试使用模态segue,它去ViewB但然后我不能去任何地方.

由于我是iOs的新手,我真的不知道如何实现这个目标?

如何从ViewC将数据传回ViewB?

我想你们可以帮助我.

编辑

在View A中,我正在调用ViewB

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"RemixScreen"])
{

    if([self.recipeFrom isEqualToString:@"ViewB"])
    {

        ViewB *reciepe = [segue destinationViewController];
        //somedata i will pass here

    }  
}
 }
Run Code Online (Sandbox Code Playgroud)

在View B中,我这样打电话

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  {
if([segue.identifier isEqualToString:@"ViewA"])
{  
    ViewA *data = [segue destinationViewController];
    //some data  
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Cth*_*utu 16

正确的方法是使用委托.您可以使用prepareForSegue中的属性向前传递数据,并使用委托传递数据.

它的工作方式是在ViewC中在prepareForSegue中设置一个委托属性.这样,ViewC可以通过您设置的协议与ViewB进行通信.

编辑:添加代码来演示:

ViewControllerBInterface:

@protocol ViewBProtocol

- (void)setData:(NSData *)data;

@end

@interface ViewBController: UIViewController <ViewBProtocol>
...
@end
Run Code Online (Sandbox Code Playgroud)

在这里,我们使ViewBController遵循ViewCController将与之通信的协议.

接下来是ViewCController接口:

@interface ViewCController: UIViewController

@property (nonatomic, weak) id<ViewBProtocol> delegate;

...

@end
Run Code Online (Sandbox Code Playgroud)

现在我们来看看ViewBController的prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIViewController* controller = [segue destinationViewController];
    if ([controller isKindOfClass:[ViewCController class]])
    {
        ViewCController* viewCController = (ViewCController *)controller;
        viewCController.delegate = self;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我们通过delegate属性将ViewC控制器链接到ViewB控制器.现在我们在ViewC中做一些事情:

- (void)sendData:(NSData *)data
{
    [self.delegate setData:data];
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以在ViewCController的viewWillDisappear方法中使用它.