0
//AddSideBarProtocol.h
@protocol AddSideBarProtocol  <NSObject>

- (IBAction)barButtonTapped:(id)sender;

@end

我正在创建上述协议以在我的所有视图控制器中使用。我对此协议的实现如下:

//AddVehicleViewController.m
- (IBAction)barButtonTapped:(id)sender{
[self.view endEditing:YES];
[lblToolBarTitle setText:@"Vehicle Management"];

tblViewSideBar = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 200, self.view.frame.size.height-44)];
tblViewSideBar.delegate = self;
tblViewSideBar.dataSource = self;
tblViewSideBar.separatorStyle = UITableViewCellSeparatorStyleNone;
[tblViewSideBar setBackgroundColor:[UIColor lightGrayColor]];

btnToClose = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[btnToClose setBackgroundColor:[UIColor clearColor]];
[btnToClose addTarget:self action:@selector(dismissView:) forControlEvents:UIControlEventTouchUpInside];

addSideBarView = [[UIView alloc]initWithFrame:CGRectMake(0, 44, 200, self.view.frame.size.height)];
[addSideBarView setBackgroundColor:[UIColor blackColor]];

addSideBarView.frame = CGRectMake(-200, 44, 200, self.view.frame.size.height);

[UIView animateWithDuration:0.5
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^ {
                     addSideBarView.frame = CGRectMake(0, 44, 200, self.view.frame.size.height);
                 }
                 completion:nil];

[self.view addSubview:btnToClose];
[self.view addSubview:addSideBarView];
[addSideBarView addSubview:tblViewSideBar];

}

我正在使用以下代码行从另一个名为“MaintenanceViewControlle”的视图控制器调用协议:

AddVehicleViewController *addVehicle = [[AddVehicleViewController alloc] init];

id <AddSideBarProtocol> addSide;
addSide = addVehicle;

[addSide barButtonTapped:sender];

但是这个协议不能正常运行,所以我缺少什么??

4

1 回答 1

0

引用苹果:

类接口声明与该类关联的方法和属性。相比之下,协议用于声明独立于任何特定类的方法和属性。

这是如何工作的:

1)你声明你的协议(就像你做的那样) 2)你在你的接口中添加他们实现这个协议 ex :

//AddVehicleViewController.h
@interface AddVehicleViewController : UIViewController <AddSideBarProtocol>

这意味着这个类应该实现你的协议中声明的方法。如果您没有在每个类中实现所有未声明为可选的方法,您将收到警告。

3)您在代码中使用它:例如:

AddVehicleViewController *addVehicle = [[AddVehicleViewController alloc] init];
[addVehicle barButtonTapped:sender];

一些关于协议的阅读: Apple Doc

于 2013-10-14T08:09:55.510 回答