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

- (IBAction)barButtonTapped:(id)sender;

@end

すべてのView Controllerで使用する上記のプロトコルを作成しています。このプロトコルの私の実装は次のとおりです。

//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」という名前の別のView Controllerからプロトコルを呼び出しています::

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 に答える