2012-03-25 18 views
1

Ich bin völlig fest mit dem Aufruf einer Methode aus einer UIView-Unterklasse, wird die Methode nur nicht gefeuert, ich habe das Gefühl, dass ich etwas falsch mache, aber nach der Suche im Internet habe ich finde keine Ahnung. Vielen Dank im VorausDelegate-Methode wird nicht aufgerufen

Hier ist die iPadMainViewController.h

#import <UIKit/UIKit.h> 
#import "TouchView.h" 

@interface iPadMainViewController : UIViewController <TouchViewDelegate> 

@property (retain) UIWebView *detailsView; 

@end 

und die iPadMainViewController.h Datei-Datei, die die Methode

- (void)MethodNameToCallBack:(NSString *)s 
{ 
    NSLog(@"%@",s); 
} 

Hier ist die TouchView.h-Datei, die t soll hält

@protocol TouchViewDelegate 
- (void)MethodNameToCallBack:(NSString *)s; 
@end 

@interface TouchView : UIView { 
    id<TouchViewDelegate> delegate; 
} 

@property (nonatomic, assign) id delegate; 

@end 

Hier ist die TouchView.m-Datei, die ein Meth aufrufen soll od davon ist

@implementation TouchView 
@synthesize delegate; 


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"HELLO FROM INSIDE"); 

    [[self delegate] MethodNameToCallBack:(NSString *)@"HELLO FROM OUTSIDE"]; 
} 

@end 

Antwort

3

Das Synthetisieren des Delegaten ist nicht genug, da es nur die Getter- und die Setter-Methode erstellt. Es wird keine Instanz von iPadMainViewController erstellt. Nachdem Sie eine Instanz von TouchView erstellt haben, sollten Sie eine Instanz von iPadMainViewController als Delegat zuweisen.

iPadMainViewController *controller = [[iPadMainViewController alloc] init... 
// ... 
TouchView *touchView = [[TouchView alloc] init... 
// ... 
touchView.delegate = controller; 

oder in der viewDidLoad Methode des iPadMainViewController:

- (void)viewDidLoad 
{ 
    // ... 
    self.touchView.delegate = self; 
} 
+0

Ich frage mich, warum keines der Beispiele, die ich gefunden habe, erwähnt, vielen, vielen Dank! – Alexidze

+0

Warum würden Sie einen neuen iPadMainViewController erstellen? Sicherlich ist TouchView eine Ansicht innerhalb der Ansicht des bestehenden iPadMainViewControllers? – jrturton

0

Kontrolle delegieren, nachdem Sie eine Instanz instanziiert Touchview, haben Sie seinen Delegaten zuweisen?

0

Verbessern Sie Ihre touchesBegan Implementierung ein wenig für die weitere Fehlersuche:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"HELLO FROM INSIDE"); 
    NSLog(@"our delegate is set towards: %@", delegate); 
    ... 
} 

es etwas Nützliches in dieser zweiten logging-Anweisung log Hat?

Ich nehme an, es druckt nil und das wäre die Ursache für Ihr Problem; Sie haben vergessen, den Delegierten zuzuweisen.