2012-08-23 67 views
1

我正在開發iPhone應用程序。我自定義導航欄的titleview。標題視圖包含一個按鈕,我還定義了委託方法以支持按鈕單擊事件。但是,當點擊按鈕時,委託不能被執行。我不知道爲什麼? 下面是我的代碼: UPDelegate.h爲什麼我的iPhone應用程序無法調用委託方法

@protocol UPDelegate <NSObject> 
@optional 
-(void)buttonClick; 
@end 

TitleView.h

#import <UIKit/UIKit.h> 
#import "UPDelegate.h" 
@interface TitleView :UIView 
@property (nonatomic, unsafe_unretained) id<UPDelegate> delegate; 
-(id)initWithCustomTitleView; 
@end 

TitleView.m

@synthesize delegate; 
-(id)initWithCustomTitleView 
{ 
    self = [super init]; 
    if (self) { 
     UIButton *titleButton = [UIButton buttonWithType:UIBUttonTypeCustom]; 
     titleButton.frame = CGRectMake(0, 0, 20, 44); 
     [titleButton setTitle:@"ABC" forState:UIControlStateNormal]; 

     // add action 
     [titleButton addTarget:delegate action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside]; 
     [self addSubview:titleButton]; 
    } 
    return self; 
} 

在我的ViewController,我實現如下的protocal:

MyViewController.h

@interface MyViewController : UIViewController<UPDelegate> 

在.m文件中,我寫了委託方法,但不能執行。 MyViewController.m

-(void)buttonClick{ 
    NSLog("click title button"); 
} 
+1

你在哪裏設置委託? – Pierre

+1

你在哪裏「設置」委託給你的MyViewController? – FilmJ

回答

1

這聽起來像你沒有設置你的titleview的的委託財產的價值,所以發送到委託財產的任何消息被忽略,因爲委託是零。

您應該確保您將titleView的委託設置爲您的MyViewController。在你的MyViewController的viewDidLoad:方法中,最好的做法很可能。

0

您是否將代表設置在任何地方?因爲你有你的titleview的的代表設置爲MyViewController:

titleView.delegate = self; 
2

你必須設置你的delegate,從你在你的titleView類創建id<UPDelegate> delegate;你的代碼示例。

因此,在您添加<UPDelegate>MyViewController中,創建一個TitleView的實例,並將委託設置爲self。

因此,在您使用MyViewController

TitleView*titleView=[[TitleView alloc]init]; 
titleView.delegate=self; 
+0

我已經在我的代碼中添加了'titleView.delegate = self',但忘記了問題的解析。並且代理方法仍然不能執行 – user429079

+0

@ user429079嘗試在'.h'中添加' - (void)buttonClick;',並檢查命令並單擊''將您帶入'MyViewController'。你在哪裏設置'委託=自己'? – iNoob

相關問題