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
Gdzie przypisać 'cellDelegate'? –
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
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