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

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

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

ViewA->ViewB This working perfectly fine ViewB->ViewC This working perfectly fine ViewC->ViewB Here is the problem. 

我尝试使用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 } } } 

在View B中,我这样打电话

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

谢谢你的帮助。

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

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

编辑:添加代码来演示:

ViewControllerBInterface:

 @protocol ViewBProtocol - (void)setData:(NSData *)data; @end @interface ViewBController: UIViewController  ... @end 

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

接下来是ViewCController接口:

 @interface ViewCController: UIViewController @property (nonatomic, weak) id delegate; ... @end 

现在我们来看看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; } } 

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

 - (void)sendData:(NSData *)data { [self.delegate setData:data]; } 

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

我在最近的一个项目中解决这个问题的方法如下:

View AparentViewController ,因此可以随时从View BView C访问;

 ViewAClass *parentView = (ViewAClass *)self.parentViewController; 

然后,您可以读取和写入View A的属性,例如;

 NSString *string = parentView.someStringProperty; 

要么

 parentView.someStringProperty = @"Hello World"; 

编辑 – “使用后退按钮从视图B返回ViewA”

 [parentView popViewControllerAnimated:YES]; 

你在使用导航控制器吗? 如果是,您可以轻松地使用Singleton传递数据,这是我最喜欢的方式,也很容易使用。 否则,如果您尝试使用按钮或其他内容浏览视图,请尝试为segue设置标识符,然后调用方法“performSegueWithIdentifier”

Interesting Posts