当我使用委托将值传递给另一个ViewController
时,我发现委托什么都不做。
我只是可以删除委托,但我仍然可以传递值!
当我需要将值从ViewControllerA
传递给ViewControllerB
时,我就这样做了,这确实有效!
- (IBAction)sendToB:(id)sender {
ViewControllerB *viewB=[[ViewControllerB alloc]initWithNibName:@"ViewControllerB" bundle:nil];
[viewB getValue:self.textInput.text];
[self presentViewController:viewB animated:YES completion:nil]; }
然后在ViewControllerB
,我确实得到了价值。
但这与委托无关,我记得有人都说使用委托在两个ViewControllers
之间传递值。那有什么区别?谢谢!
答案 0 :(得分:2)
您可以通过多种方式传递值,您展示的值也用于传递值。
但是假设发生了一种情况,您必须从显示的ViewControllerA
更新ViewControllerB
值,然后我相信您不会再次初始化 ViewControllerA
然后尝试传递该值。
在这种情况下,您需要delegate
这样做,您可以通过以下方式使用protocol
来实现此目的: -
在ViewControllerB.h
文件中创建协议
@protocol sampleDelegate <NSObject>
- (void)updatedValue:(NSString* )newData;
@end
@property (nonatomic,assign)id<delegate>delegateObj;
在ViewControllerB.m
档案
- (IBAction)sendToA:(id)sender
{
[self.delegateObj updatedValue:@"Updated value"];
}
现在在ViewControllerA.m
文件中覆盖您的ViewControllerB's
委托对象:
- (IBAction)sendToB:(id)sender
{
ViewControllerB *viewB=[[ViewControllerB alloc]initWithNibName:@"ViewControllerB" bundle:nil];
[viewB setDelegate:self];
[viewB getValue:self.textInput.text];
[self presentViewController:viewB animated:YES completion:nil];
}
//Implement the protocol method here in ViewControllerA.m
- (void)updatedValue:(NSString* )newData
{
NSLog(@"Value that updated in ViewControllerB is %@",newData);
}
希望这有助于您了解代表的重要性。 :)
答案 1 :(得分:0)
通常,委托是获取VCB到VCA的价值的一种方式。在这种情况下,VCA将实现委托协议(通常)并将其自身作为委托传递给VCB。然后,当VCB具有新值时,VCB会调用类似[delegate update:value]
的内容。
答案 2 :(得分:0)
您的问题似乎暗示您认为在一个VC想要将数据传递给另一个VC时,您必须在每种情况下使用代理。情况并非如此,只有在必要和/或适用且不是唯一的方式时才使用代表。
在您的示例中,如果您想将VCB中的值传递回VCA,则可以使用委托的示例。 当VCB不知道创建它的对象时,你会使用委托,但它知道它有一些值可以传回给那个对象。这样VBC可以由不同类型的对象创建,VCB总是可以将值传回给它们而不需要了解它们。
答案 3 :(得分:0)
委托用于向后传递值。当数据向前传递时,通常使用你的构造。