如何将对象传递给委托?

时间:2010-08-12 00:50:29

标签: iphone objective-c cocoa

我正在创建一个委托视图控制器并将其呈现给用户以执行操作但我想基于原始视图控制器更改委托视图控制器上的NSString。例如,如果委托视图控制器是viewControllerA的委托,则显示Foo,但如果它是viewControllerB的委托,则显示Blah。虽然我无法弄清楚如何传递某种信息来指示原始视图控制器是什么。我注意到如果我做一个NSLog(@“我来自%@”,[自我委托]);它会告诉我原始视图控制器是什么,以及内存地址,但我似乎无法将其转换为NSString对象来检查其值。如果这是一种方法来使这项工作,或更好的方式来做到这一点,那么这也有效...

- (IBAction)editDate {
DatePickerViewController *datePickerView = [[DatePickerViewController alloc] init];
datePickerView.delegate = self;
datePickerView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:datePickerView animated:YES];
[datePickerView release];
}

2 个答案:

答案 0 :(得分:2)

您似乎正在使用一些与大多数Objective-C编码器不同的术语。

在这里,您将实例化一个视图控制器以显示为模态视图。该视图控制器有一个名为delegate的属性,允许它调用某些方法来报告对其状态的更改。这不会使它成为“委托视图控制器”,这使它成为“具有委托的对象”。

您碰巧使用另一个视图控制器类作为委托,但是实现DatePickerViewController对象要调用以报告更改的方法的任何对象都可以分配给该委托属性。


我认为你问的问题是“如何让DatePickerViewController显示不同的信息,具体取决于它报告的对象类型?”,答案与“我如何制作UILabel”大致相同根据创建它的视图控制器显示不同的文本?“ - 在创建它时设置属性或调用方法。

如果你真的只想将一个字符串传递给DatePickerViewController,你可以将一个NSString *属性添加到DatePickerViewController并使用任意文本设置它,

datePickerView.myString = @"some information that you want";

答案 1 :(得分:0)

您可以使用委托的类。

if([[self delegate] isKindOfClass:[ViewControllerA class]]) {
    [self doViewControllerAThings];
}
else {
    ...
}