2013-10-14 7 views
0
//AddSideBarProtocol.h 
@protocol AddSideBarProtocol <NSObject> 

- (IBAction)barButtonTapped:(id)sender; 

@end 

Я создаю выше протокол для использования во всех контроллерах моего представления. Моя реализация этого протокола заключается в следующем:Протокол ios не работает должным образом

//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]; 

Но этот протокол не является правильно функционирует, поэтому, где мне не хватает?

+0

Что ошибка У Р получать? – bhawesh

+0

Я не получаю никаких ошибок, но этот метод используется для добавления представления при нажатии кнопки, это представление не добавляет использование протокола. –

+0

Почему добавление addVehicle в addSide? Почему бы не сделать [addVehicle barButtonTapped: отправитель]? Если вы правильно разместили в своем AddVehicleViewController.h, у вас не должно быть ошибок/предупреждений – KIDdAe

ответ

0

Цитата Apple:

интерфейс класса объявляет методы и свойства, связанные с этим классом. Протокол, напротив, используется для объявления методов и свойств, которые не зависят от какого-либо конкретного класса.

Как эта работа:

1) Вы объявляете свой протокол (как вы делали) 2) Вы добавляете в своих интерфейсах, что они реализуют этот протокол Ex:

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

Это означает, что этот класс должен реализовывать методы, объявленные в вашем протоколе. У вас появятся предупреждения, если вы не реализуете все методы, не объявленные как необязательные в каждом из этих классов.

3) Вы можете использовать его в вашем коде: Ex:

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

Некоторые чтения о протоколах: Apple Doc

+0

не работает, представление не добавляется. –

+0

'barButtonTapped:' вызывается? В вашем методе много просмотров, которые не отображаются? – KIDdAe

+0

Да, этот метод вызывается и выполняется должным образом, и ни один из представлений не появляется. –

Смежные вопросы