2011-02-05 15 views
8

Czytałem docs Apple i mam trolled te fora i ja (z powodzeniem) zrobić kilka tutoriali i wykonane własnych delegatów i nadal czegoś nie rozumiesz. Jestem pewien, że jest to coś, z czym się rozprawiam, ale ponieważ wykonałem należytą staranność i nadal nie wiem, co robię źle, miałem nadzieję, że jeden z was będzie w stanie mi powiedzieć.Delegat z kranu przycisku wewnątrz niestandardowych UITableViewCell

Sytuacja:

Mam zwyczaj UITableViewCell, który ma przycisk w nim. Po naciśnięciu przycisku próbuję podciągnąć UIImagePickerController z delegata tej niestandardowej komórki. Mogę pułapkę i odpowiedzieć na przycisk dotknij bez problemu, ale przepływ nigdy nie idzie do metody delegata. Innymi słowy, kiedy przechodzę przez kod, wszystko jest w porządku, dopóki nie spróbuję przejść od metody docelowej przycisku do metody delegatów w drugiej klasie. Po prostu nigdy się nie nazywa.

Oto kod.

w pliku interfejsu dla niestandardowego komórki ustawić identyfikator dla pełnomocnika, ustaw IBOutlet do UIButton i ustawić sposób protokołu:

#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 

The UIButton jest podłączona do sposobu getAPic w IB.

W pliku wdrożeniowego dla komórki niestandardowego kładę sposób, że cele UIButton na dotyk wewnątrz i próbując wywołać metodę delegata w delegata:

#import "CustomPicCell.h" 

@implementation CustomPicCell 
@synthesize cellDelegate; 

... 

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

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

W interfejsie klasy delegat ustawić go jako delegat na komórce niestandardowe:

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

W implementacji klasy delegat próbuję wyciągnąć 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]; 
} 

Nie mogę zrozumieć, dlaczego delegat nigdy nie zostanie wezwany! Proszę zrozumieć, jestem pewien, że coś przeoczyłem, ale byłem wielokrotnie na forach i tych forach i nie mogę znaleźć tego, co robię źle. Używam delegatów w innych częściach kodu, dobrze. To jedno miejsce nie działa. Czy ktoś może mi pokazać, na co mnie stać? Dzięki

+4

Gdzie przypisać 'cellDelegate'? –

+0

Och, mógłbym się smagnąć! Ole Begemann masz 100% racji. Mógłbym przysiąc, że to zrobiłem. ale myślę, że późnym wieczorem kodowanie nie jest moim przyjacielem. Jestem idiotą, jeśli go brakuje! Dziękuję Ci bardzo. To rozwiązało to. Zawsze potrójnie sprawdzam rano. – addzo

+0

Ole, czy mógłbyś również podzielić się swoją poprawką w jaki sposób przypisałeś cellDelegate? Mam podobny kod jak twój i miałem podobny problem, gdy metody delegatów zdefiniowane w innych kontrolerach widoku działają doskonale. Jednak metoda delegata zdefiniowana w niestandardowym obiekcie UITableViewCell nie była wywoływana w obiekcie UITableViewController używającym obiektu UITableViewCell. – Jason

Odpowiedz

18

Dlaczego tak się czujesz? Bezpośrednio w klasie UIViewController można przypisać akcję dla przycisku takiego jak ten.

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

Hi Prashant czy masz link lub więcej informacji o tym podejściu? – Juan

+3

Jaki byłby najlepszy sposób śledzenia komórki naciśniętego przycisku? –

+0

Używam xib, ale zdarzenie click button uruchamia tylko pierwszą komórkę ... nie dla innych komórek ... czy ktoś może powiedzieć, co jest nie tak? – saran

Powiązane problemy