Ich habe die Apple-Dokumente gelesen und diese Foren durchforstet und ich habe (erfolgreich) einige Tutorials gemacht und meine eigenen Delegierten erstellt und ich immer noch etwas nicht verstehen. Ich bin mir sicher, dass es etwas ist, das ich nicht verstehe, aber da ich mich gründlich informiert habe und immer noch nicht weiß, was ich falsch mache, hatte ich gehofft, dass einer von Ihnen es mir sagen könnte.
Die Situation:
Ich habe eine benutzerdefinierte UITableViewCell, die eine Schaltfläche in es hat. Wenn die Schaltfläche angetippt wird, versuche ich, die UIImagePickerController Form einen Delegaten dieser benutzerdefinierten Zelle zu ziehen. Ich kann Trap und reagieren auf die Schaltfläche tippen kein Problem, aber der Fluss geht nie an die Delegate-Methode. Mit anderen Worten, wenn ich den Code durchlaufe, ist alles in Ordnung, bis ich versuche, von der Zielmethode der Schaltfläche zur Delegatenmethode in der zweiten Klasse zu wechseln. Sie wird einfach nie aufgerufen.
Hier ist der Code.
In der Schnittstellendatei für die benutzerdefinierte Zelle lege ich die ID für den Delegaten fest, richte das IBOutlet für die UIButton ein und lege die Protokollmethode fest:
#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
Der UIButton ist mit der getAPic-Methode in IB verbunden.
In der Implementierungsdatei für die benutzerdefinierte Zelle lege ich die Methode, die die UIButton Ziele auf berühren innerhalb und versuchen, die Delegate-Methode in den Delegaten aufrufen:
#import "CustomPicCell.h"
@implementation CustomPicCell
@synthesize cellDelegate;
...
- (IBAction)getAPic {
NSLog(@"You are here ...");
if (cellDelegate && [cellDelegate respondsToSelector:@selector(getPhoto)]) {
[cellDelegate getPhoto];
}
}
In der Schnittstelle der Delegatenklasse habe ich sie als Delegaten für die benutzerdefinierte Zelle festgelegt:
@interface DelegateClass : UIViewController < ... CustomPicCellDelegate> {
...
In der Implementierung der Delegatenklasse versuche ich, den UIImagePickerController zu ziehen:
- (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];
}
Ich kann mir nicht erklären, warum der Delegierte nie angerufen wird! Bitte verstehen Sie, ich bin sicher, dass ich etwas verpasst haben, aber ich habe über die Dokumente und diese Foren viele Male gewesen und ich kann nicht finden, was ich falsch mache. Ich bin mit Delegaten in anderen Teilen des Codes ganz gut. Diese eine Stelle funktioniert nicht. Kann mir jemand zeigen, was ich fett-fingering bin? Danke