当我使用委托将值传递给另一个ViewController时,我发现委托什么都不做

时间:2014-04-12 15:13:51

标签: ios objective-c cocoa-touch delegates

当我使用委托将值传递给另一个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之间传递值。那有什么区别?谢谢!

4 个答案:

答案 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)

委托用于向后传递值。当数据向前传递时,通常使用你的构造。