[英]How to pass data back from one view to other View in 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中在prepareForSegue中设置一个委托属性。 这样,ViewC可以通过您设置的协议与ViewB进行通信。
编辑:添加代码来演示:
ViewControllerBInterface:
@protocol ViewBProtocol
- (void)setData:(NSData *)data;
@end
@interface ViewBController: UIViewController <ViewBProtocol>
...
@end
在这里,我们使ViewBController遵循ViewCController将与之通信的协议。
接下来是ViewCController接口:
@interface ViewCController: UIViewController
@property (nonatomic, weak) id<ViewBProtocol> 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 A是parentViewController
,因此可以随时从View B和View C访问;
ViewAClass *parentView = (ViewAClass *)self.parentViewController;
然后,您可以读取和写入View A的属性,例如;
NSString *string = parentView.someStringProperty;
要么
parentView.someStringProperty = @"Hello World";
编辑 - “使用后退按钮从视图B返回ViewA”
[parentView popViewControllerAnimated:YES];
你在使用导航控制器吗? 如果是,您可以轻松地使用Singleton传递数据,这是我最喜欢的方式,也很容易使用。 否则,如果您尝试使用按钮或其他东西浏览视图,请尝试为segue设置标识符,然后调用方法“performSegueWithIdentifier”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.