将PickerView的委托委托给另一个视图

时间:2012-05-04 18:04:23

标签: objective-c ios uipickerview

首先,我想说我刚开始“学习”目标-c。对不起,如果我犯了大错误

我试图将-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component从视图2委托给视图1 ...

查看1.h:

@interface ViewController : UIViewController <PopOverViewControllerDelegate>

查看1.m:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component{ //stuff here}

查看2.h:

@protocol PopOverViewControllerDelegate <NSObject, UIPickerViewDelegate>
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component;
@end

@interface PopOverViewController : UIViewController <UIPickerViewDataSource>

查看2.m:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component{

[self.delegate pickerView:categoryPicker didSelectRow:row inComponent:component];

}

它不起作用......

2 个答案:

答案 0 :(得分:1)

  1. 视图成为另一个视图的委托有点奇怪。视图真的不应该对数据了解多少 - 控制器通常会做出代表所需的各种决策。

  2. 不是让一个委托(View1)将选择器的委托消息传递给另一个委托(View2),为什么不将View2作为选择器的委托呢?看起来你的事情比他们需要的更复杂。

  3. 请告诉我们有关此问题的更多信息,而不是“它不起作用”。如果它奏效了,你首先就不会问。告诉我们 它不起作用。 View2中的方法是否被调用?如果是,那么问题是什么?如果不是,为什么不呢? View1中会发生什么导致它不能调用View2?

答案 1 :(得分:0)

要将delegate传递给其他class,您只需将UIPickerView的代理设置为另一个class。在您的第2课中,定义您要处理的delegate方法,并在class的.h中确认UIPicklerView delegate。然后在class 1中你只需要写这一行 -

[pickerView setDelegate:class2];
上面一行pickerView中的

UIPickerView的引用,而class2是对class2的实例的引用。

另请查看@Caleb的答案。我完全同意他的观点。通过做上述事情,你会让事情变得更复杂。