2014-04-12 45 views
1

当我使用委托将值传递给另一个ViewController时,我发现委托什么都不做。 我只是可以删除该委托和我还是可以通过值!当我使用委托将值传递给另一个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之间传递价值。那么有什么区别?谢谢!

回答

2

您可以通过多种方式传递值,您显示的值也用于传递值。

但是,假设发生的情况下,你必须从更新的价值ViewControllerA您呈现ViewControllerB那么我相信你不会ViewControllerA再次初始化,然后尝试传递值。

在这种情况下,你也将需要delegate这样做,你可以通过下列方式使用实现这一目标: -

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); 
} 

希望这可以帮助您了解代表的重要性。 :)

+0

谢谢你! – user3527021

+0

我想知道当我尝试从VCB移回VCA时,我不需要使用:ViewControllerA * viewA = [ViewControllerA alloc] init]; [self presentViewController:viewA animated:YES completion:nil]; ? – user3527021

+0

非常感谢!我认为我在路上是正确的。 – user3527021

0

通常,委托是从VCB返回VCA值的一种方式。在这种情况下,VCA将实施委托协议(通常),并将其自身作为代表传递给VCB。当VCB具有新的价值时,它会调用类似[delegate update:value]的东西。

+0

所以,你的意思是,我们只是不需要委托方式时,我们只是做从VCA传递价值VCB?例如,有VCA的文本字段中输入我的东西,然后我按下按钮,文本字段中的文本发送到其中传递的值是一个标签中显示VCB。 – user3527021

+0

正确,因为正如你所看到的,VCA已经有了一个VCB的参考,或者是因为它明确地创建它或者是因为一个segue。但是,除非你做了特别的事情,否则VCB通常不知道是什么导致它出现。 (所以,代表或通知或独立的数据模型。) –

0

你的问题似乎暗示你认为你必须在每个情况下使用委托,当一个VC想要将数据传递给另一个时。情况并非如此,代表只有在必要和/或适用的情况下才能使用,而不是唯一的方法。

在你的例子中,如果你想将VCB中的值传递回VCA,那么可以使用代理的例子。 你会使用委托VCB时,不知道是什么对象创建的,但它知道它有一定的价值传递回无论该对象了。这样,VBC可以由不同类型的对象创建,VCB可以始终将价值传回给他们,而无需了解任何关于它们的任何信息。

+0

非常感谢!我认为我对此有点清楚,但并不完全。 – user3527021

0

代表用于向后传递值。当数据向前传递时,那么通常使用你的构造。

+0

谢谢。清晰。 – user3527021