使用协议和委托并不是我经常使用的东西(我之前使用过它),但是这一次,我做了一切,因为它应该完成,但协议中的方法不会被调用。
所以我有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)子视图连接: 有趣的是,当按下按钮时,如果返回false。 有谁能解释为什么会这样? 谢谢
答案 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];
}