2012-05-04 34 views
1

首先,我想说我刚刚开始“学习”objective-c。很抱歉,如果我做了很大的错误将PickerView的代表委托给另一个视图

我试着从委托鉴于2 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component可以看到...

查看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]; 

} 

它不工作...

回答

0
  1. 这是一个有些奇怪的观点是另一种观点的代表。观点实际上应该不太了解数据 - 控制器通常会做出委托所需的各种决策。

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

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

+0

好的,事实上,视图1和视图2都是控制器。在视图2中,我只有一个PickerView。我需要知道在视图1视图2的PickerView的哪一行被选中... – Benjamin

+0

在视图2中,' - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { [self.delegate pickerView:categoryPicker didSelectRow:row inComponent:component]; '打电话。没有什么被称为查看1 – Benjamin

0

要通过delegate到不同class你只需要的UIPickerView委托设为您的另一class。在你的班级2中定义你想要处理的delegate方法,并在class的.h中确认UIPicklerViewdelegate。然后在class 1,你只需要在此线 -

[pickerView setDelegate:class2]; 

在上面一行pickerViewUIPickerViewclass2引用是参考实例class2

也请看看@Caleb答案。我完全同意他的看法。通过做以上事情,你正在为你的事情变得更加复杂。

+0

是的,我完全同意..但我没有足够的经验在Objective-C找到完成此任务的完美方式 – Benjamin

相关问题