使用協議和委託不是我經常使用的東西(我之前使用過),但是這一次,我做了所有事情,因爲它應該完成,但協議的方法沒有被調用。爲什麼不調用這個委託方法?
所以我有2個類:ToolBarViewController和核心,並在ToolBarView我有1個按鈕。當我按下按鈕時,它應該調用從ToolBarViewControllerDelegate按下的方法toolBarButton。 一些代碼:
1)協議和委託聲明在ToolBarViewController.h
@protocol ToolBarViewControllerDelegate <NSObject>
@optional
-(void)toolBarButtonPressed:(NSString*)buttonName;
@end
。 。
@property (nonatomic, weak) id<ToolBarViewControllerDelegate> delegate;
2)在ToolBarViewController.m方法呼叫
- (IBAction)button1:(NSButton *)sender {
NSLog(@"b1");
if([ self.delegate respondsToSelector:@selector(toolBarButtonPressed:)]){
[self.delegate toolBarButtonPressed:@"button1"];
}else{
NSLog(@"don't responde");
}
}
3)在Core.h
@interface Core : NSObject<ToolBarViewControllerDelegate>
4使用ToolVarViewControllerDelegate核心)實例化對象ToolBarViewController和在設置代表Core.m
-(id)init{
self = [super init];
if (self){
toolBarViewController = [[ToolBarViewController alloc]init];
[toolBarViewController setDelegate:self];
self.mainViewController = [[MainViewController alloc]init];
NSLog(@"Core Inited.........DONE");
}
return self;
} 5)的方法,toolBarButtonPressed:在Core.m
-(void)toolBarButtonPressed:(NSString*)buttonName{
NSLog(@"Button pressed %@",buttonName);
}
6)ToolBarViewController聲明在core.h:
@property (strong) ToolBarViewController* toolBarViewController;
7)子視圖連接: 的有趣之處在於當按鈕被按下時,如果返回false。 有沒有人可以解釋爲什麼會發生這種情況? 謝謝
你能檢查'self.delegate'是否在按鈕點擊處理程序中爲零嗎? – Macondo2Seattle
是的,它是零。但我不明白爲什麼 – user1792771
我檢查,如果對象toolBarViewController是零後,我在core.m中設置委託,它不爲空。那麼爲什麼ToolBarViewController中的委託是零? – user1792771