Я прочитал документы Apple, и я прокрутил эти форумы, и я (успешно) провел некоторые уроки и создал своих собственных делегатов, а я все еще не понимаю чего-то. Я уверен, что это то, от чего я делаю интервалы, но, поскольку я проявил должную осмотрительность и до сих пор не знаю, что я делаю неправильно, я надеялся, что один из вас сможет сказать мне.
Ситуация:
У меня есть пользовательский UITableViewCell, в котором есть кнопка. Когда кнопка нажата, я пытаюсь вызвать UIImagePickerController из делегата этой пользовательской ячейки. Я могу перехватить и ответить на нажатие кнопки без проблем, но поток никогда не идет к методу делегата. Другими словами, когда я перебираю код, все в порядке, пока я не попытаюсь перейти от метода назначения кнопки к методу делегата во втором классе. Просто его никогда не вызывают.
Вот код.
В файле интерфейса для пользовательской ячейки я установил идентификатор делегата, настроил IBOutlet для UIButton и установил метод протокола:
#import <UIKit/UIKit.h>
@protocol CustomPicCellDelegate;
@interface CustomPicCell : UITableViewCell <UITextInputTraits> {
UIButton *picButton;
...
id<CustomPicCellDelegate> cellDelegate;
}
@property (nonatomic, retain) IBOutlet UIButton *picButton;
...
@property (nonatomic, assign) id<CustomPicCellDelegate> cellDelegate;
...
- (IBAction)getAPic;
@end
@protocol CustomPicCellDelegate <NSObject>
- (void)getPhoto;
@end
UIButton подключается к методу getAPic в IB.
В файле реализации для пользовательской ячейки я помещаю метод, на который нацеливается UIButton, и пытаюсь вызвать метод делегата в делегате:
#import "CustomPicCell.h"
@implementation CustomPicCell
@synthesize cellDelegate;
...
- (IBAction)getAPic {
NSLog(@"You are here ...");
if (cellDelegate && [cellDelegate respondsToSelector:@selector(getPhoto)]) {
[cellDelegate getPhoto];
}
}
В интерфейсе класса делегата я установил его в качестве делегата для пользовательской ячейки:
@interface DelegateClass : UIViewController < ... CustomPicCellDelegate> {
...
В реализации класса делегата я пытаюсь получить UIImagePickerController:
- (void)getPhoto {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentModalViewController:picker animated:YES];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo (NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];
}
Я не могу понять, почему делегата никогда не вызывают! Пожалуйста, поймите, я уверен, что что-то пропустил, но я много раз просматривал документы и эти форумы, и я не могу найти, что я делаю неправильно. Я использую делегатов в других частях кода просто отлично. Это одно место не работает. Может кто-нибудь показать мне, что я толстяк?
Спасибо