2016-09-09 5 views
-1

У меня есть UIView, что называется Popup и выставляется из UIViewContorller (ParentVC) У UIView У меня есть 4 кнопки. При нажатии кнопок необходимо открыть новые контроллеры (ParentVC). Я использую делегата, была ли моя ошибка?Делегировать форму UIView на UIViewController

//Popup.h 
@protocol PopupDelegate 
@required 

- (IBAction)stepOfRestoration:(id)sender; 
- (IBAction)clientCall:(id)sender; 
- (IBAction)readyTo:(id)sender; 
- (IBAction)givePhone:(id)sender; 

@end 

@interface Popup : PSCustomViewFromXib 

@property (nonatomic, assign) id <PopupDelegate> delegate; 
@property (strong, nonatomic) IBOutlet UIView *view; 

- (IBAction)stepOfRestoration:(id)sender; 
- (IBAction)clientCall:(id)sender; 
- (IBAction)readyTo:(id)sender; 
- (IBAction)givePhone:(id)sender; 

В .m я это:

@synthesize delegate; 
.... 
- (IBAction)stepOfRestoration:(id)sender { 
[self.delegate buttonPressed]; 
} 

И это Родитель .m

... 
    CGRect rect = CGRectMake(0,0,200,300); 
    Popup *popup1 = [[Popup alloc] initWithFrame:rect]; 
    popup1.delegate = self; 
    .... 

-(void)buttonPressed { 
[self performSegueWithIdentifier:@"infoSegue" sender:nil]; 
} 

Так было моя ошибка?

+0

', если ([делегат respondsToSelector: @selector (buttonPressed)]) {[делегировать buttonPressed]; } 'Положите аналогичную проверку и посмотрите, находится ли элемент управления внутри цикла if. – pkc456

ответ

0

В вашем протоколе нет метода под названием buttonPressed, вам необходимо вызвать метод в вашем протоколе, например.

Popup.m 
- (IBAction)buttonPressed:(id)sender { 
    [self.delegate stepOfRestoration:sender]; 
} 

Parent.m 
- (IBAction)stepOfRestoration:(id)sender { 
    // some code 
} 

Link на долго наматывается, но, надеюсь, полезный учебник, удачи.

+0

Его работы, спасибо! –

0

В вашем Parent .m вы должны соответствовать всем методам, определенным в протоколе. В вашем файле Parent.m buttonPressed метода нет в протоколе. Так обновить имя ниже метода с buttonPressed как следующие: -

Update ниже код на Popup.h декларируя методы PopupDelegate


- (IBAction)stepOfRestoration:(id)sender; 

С


-(void)buttonPressed; 
0

вы не должны» t добавьте методы IBAction в ваш протокол

вместо того, чтобы добавить следующие методы, соответствующие каждой кнопке действия

//Popup.h

@protocol PopupDelegate 
@required 

- (Void)stepOfRestoration:(id)sender; 
- (Void)clientCall:(id)sender; 
- (Void)readyTo:(id)sender; 
- (Void)givePhone:(id)sender; 

@end 

и вызывать эти методы протокола в соответствующих методов кнопки действий

например, //Popup.m

- (IBAction)stepOfRestoration:(id)sender { 
[self.delegate stepOfRestoration:sender]; 
} 

и //Parent.m

-(Void)stepOfRestoration:(id)sender{ 
// code here 
}