2012-05-04 5 views
1

Прежде всего, я хотел бы сказать, что я только начинаю «учиться» цели-c. Извините, если я сделал большую ошибкуДелегат делегата PickerView в другом представлении

Im пытается делегировать -(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.М:

-(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

Хорошо, на самом деле, View 1 et View 2 оба являются контроллерами. В View 2 У меня есть только один PickerView. И мне нужно знать в представлении 1, какая строка из PickerView View 2 выбрана ... – Benjamin

+0

В представлении 2, '- (void) pickerView: (UIPickerView *) pickerView didSelectRow: (NSInteger) строка inComponent: (NSInteger) component { [self.delegate pickerView: categoryPicker didSelectRow: row inComponent: component]; } 'вызов. Ничего не вызвано в View 1 – Benjamin

0

Чтобы передать delegate к другому class вам просто нужно установить делегат UIPickerView на свой другой class. В вашем классе 2 определите delegate методы, которые вы хотите обрабатывать, и в .h из class 2 подтвердить UIPicklerViewdelegate. Тогда в class 1 вам просто нужно написать эту строку -

[pickerView setDelegate:class2]; 

в строке выше pickerView является отнесение UIPickerView и class2 является ссылка на экземпляр class2.

Также обратите внимание на ответ @Caleb. Я полностью согласен с ним. Делая выше, вы делаете вещи более сложными для вас.

+0

Да, я полностью согласен. Но у меня недостаточно опыта в Objective-C, чтобы найти идеальный способ выполнить эту задачу – Benjamin

Смежные вопросы