2011-02-05 4 views
8

He leído la documentación de Apple y he controlado estos foros y (con éxito) que he hecho algunos tutoriales y hecho mis propios delegados y yo todavía no entender algo. Estoy seguro de que es algo que estoy espaciando, pero como he hecho la diligencia debida y todavía no sé lo que estoy haciendo mal, esperaba que alguno de ustedes pudiera contarme.Delegado de botón de toque en el interior a medida UITableViewCell

La situación:

tengo una costumbre UITableViewCell que tiene un botón en ella. Cuando se toca el botón, trato de sacar el UIImagePickerController de un delegado de esta celda personalizada. Puedo atrapar y responder al botón tocar sin problema, pero el flujo nunca va al método delegado. En otras palabras, cuando paso por el código, todo está bien hasta que trato de pasar del método de destino del botón al método de delegado en la segunda clase. Simplemente nunca se llama.

Aquí está el código.

En el archivo de interfaz para la célula a medida que establecer el ID para el delegado, configurar el IBOutlet para la UIButton, y establecer el método de protocolo:

#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 

El UIButton está conectado con el método getAPic en IB.

En el archivo de implementación para la célula a medida que ponen el método que los objetivos UIButton en contacto en el interior y el intento para llamar al método delegado en el delegado:

#import "CustomPicCell.h" 

@implementation CustomPicCell 
@synthesize cellDelegate; 

... 

- (IBAction)getAPic { 
    NSLog(@"You are here ..."); 

    if (cellDelegate && [cellDelegate respondsToSelector:@selector(getPhoto)]) { 
     [cellDelegate getPhoto]; 
    } 
} 

En la interfaz de la clase delegado lo fijo como el delegado de la celda personalizado:

@interface DelegateClass : UIViewController < ... CustomPicCellDelegate> { 
... 

En la implementación de la clase delegada intento de tirar de la 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]; 
} 

¡No puedo entender por qué nunca se llama al delegado! Por favor, comprenda que estoy seguro de haber perdido algo, pero he revisado los documentos y estos foros muchas veces y no puedo encontrar lo que estoy haciendo mal. Estoy usando delegados en otras partes del código muy bien. Este único punto no funciona. ¿Alguien puede mostrarme lo que soy digitación de grasa? Gracias

+4

¿Dónde asignas 'cellDelegate'? –

+0

¡Oh, podría pegarme! Ole Begemann eres 100% correcto. Podría haber jurado que lo había establecido. pero supongo que la codificación tarde en la noche no es mi amigo. ¡Soy un idiota por perder eso! Muchas gracias. Eso lo resolvió Siempre triple check en la mañana, supongo. – addzo

+0

Ole, ¿podría compartir también su arreglo sobre cómo asignó CellDelegate? Tengo un código similar al suyo y tuve un problema similar cuando los métodos de delegado definidos en otros controladores de vista funcionan a la perfección. Sin embargo, el método delegado definido en una UITableViewCell personalizada no se llamaba en el UITableViewController que estaba utilizando UITableViewCell. – Jason

Respuesta

18

¿Por qué haces esto? Directamente en la clase UIViewController puede asignar acción para un botón como este.

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

Hola Prashant ¿tienes un enlace o más información sobre este enfoque? – Juan

+3

¿Cuál sería la mejor manera de rastrear la celda de un botón girado? –

+0

estoy usando xib pero sólo los incendios botón de eventos Click primera cell..not para otra cells..can cualquiera diga lo mal – saran

Cuestiones relacionadas