2012-03-25 204 views
1

我完全堅持從一個UIView子類調用方法,該方法不會被解僱,我有一種感覺,我做錯了事,但在搜索完網頁後我做了沒有找到任何線索。謝謝你在前進委託方法不叫

這裏的iPadMainViewController.h文件

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

@interface iPadMainViewController : UIViewController <TouchViewDelegate> 

@property (retain) UIWebView *detailsView; 

@end 

和保存方法

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

這裏iPadMainViewController.h文件在本TouchView.h文件,這是應該牛逼

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

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

@property (nonatomic, assign) id delegate; 

@end 

這是TouchView.m文件,應該調用一個方法它的代表的

@implementation TouchView 
@synthesize delegate; 


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

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

@end 

回答

3

合成委託是不夠的,因爲它只是創建getter和setter方法。它不創建iPadMainViewController的實例。

因此,在創建TouchView的實例後,應該將iPadMainViewController的實例指定爲委託。

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

還是在iPadMainViewController的viewDidLoad方法:

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

我想知道爲什麼我沒有發現這些例子提到那個,很多很多謝謝! – Alexidze 2012-03-25 16:13:49

+0

爲什麼要創建一個新的iPadMainViewController,當然TouchView是包含在現有iPadMainViewController視圖中的視圖? – jrturton 2012-03-26 07:50:23

0

檢查後,你實例化一個TouchView實例,你分配它的代表?

0

增強您的touchesBegan實現一點作進一步調試:

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

是否登錄的東西在第二logging語句有用嗎?

我認爲它打印nil這將是你的問題的根源;你忘了分配代表。