2011-02-05 3 views
8

Я прочитал документы Apple, и я контролируемый эти форумы и я (успешно) сделать некоторые учебники и сделал свои собственные делегат и я еще не понимаю. Я уверен, что это то, что я отключаю, но поскольку я сделал должную осмотрительность и до сих пор не знаю, что я делаю неправильно, я надеялся, что один из вас сможет мне сказать.Делегат от кнопки крана внутри пользовательского UITableViewCell

Ситуация:

У меня есть обычай 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]; 
} 

Я не могу понять, почему делегат никогда не называется! Пожалуйста, поймите, я уверен, что что-то пропустил, но я много раз встречался с документами и этими форумами, и я не могу найти то, что я делаю неправильно. Я очень хорошо использую делегатов в других частях кода. Это одно место не работает. Может ли кто-нибудь показать мне, что я толстую? Thanks

+4

Где вы указываете 'cellDelegate'? –

+0

О, я мог бы ударить себя! Оле Бегеманн, ты на 100% прав. Я мог бы поклясться, что я это сделал. но я думаю, что поздно ночью кодирование не мой друг. Я идиот для этого! Большое спасибо. Это решило. Кажется, я всегда проверяю утро три раза. – addzo

+0

Ole, Не могли бы вы также поделиться своим решением, как вы назначили cellDelegate? У меня такой же код, как у вас, и у меня была аналогичная проблема, когда методы делегата, определенные в других диспетчерах представлений, работают отлично. Однако метод делегата, определенный в пользовательском UITableViewCell, не вызывался в UITableViewController, который использовал UITableViewCell. – Jason

ответ

18

Почему вы так делаете? Непосредственно в классе UIViewController вы можете назначить действие для этой кнопки.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    [cell. picButton addTarget:self 
         action:@selector(getPhoto) 
       forControlEvents:UIControlEventTouchUpInside]; 
    // ... 
} 
+0

Привет, Прашант у вас есть ссылка или дополнительная информация об этом подходе? – Juan

+3

Что было бы лучшим способом отслеживать ячейку нажатой кнопки? –

+0

Я использую xib, но событие нажатия кнопки запускается только для первой ячейки. Не для других ячеек .. может кто-нибудь сказать, что неправильно – saran

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