为什么不调用此委托方法?

时间:2014-07-24 18:25:26

标签: objective-c cocoa delegates

使用协议和委托并不是我经常使用的东西(我之前使用过它),但是这一次,我做了一切,因为它应该完成,但协议中的方法不会被调用。

所以我有2个类:ToolBarViewController和Core,在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中的ToolVarViewControllerDelegate

@interface Core : NSObject<ToolBarViewControllerDelegate>

4)实例化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)core.h中的ToolBarViewController声明:

@property (strong) ToolBarViewController* toolBarViewController;

7)子视图连接: enter image description here 有趣的是,当按下按钮时,如果返回false。 有谁能解释为什么会这样? 谢谢

1 个答案:

答案 0 :(得分:0)

此行创建一个全新的视图控制器。它获取已经在视图层次结构中的那个。

toolBarViewController = [[ToolBarViewController alloc] init];

如果ToolBarViewController已经在你的视图层次结构中,你应该做这样的事情。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.toolBarViewController setDelegate:self];
}

如果您的视图层次结构中的不是,它应该看起来像这样。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.toolBarViewController = [[ToolBarViewController alloc] init];
    [self.toolBarViewController setDelegate:self];
    [self.view addSubview:self.toolBarViewController.view];
}