我有UIView,叫做Popup并从UIViewContorller(ParentVC)弹出 在UIView我有4个按钮。按下按钮时,需要从(ParentVC)打开新的控制器。我正在使用代表,这是我的错误吗?
//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];
}
这是Parent .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 :(得分:0)
您的协议中没有名为buttonPressed
的方法,您需要在协议中调用方法,例如:
Popup.m
- (IBAction)buttonPressed:(id)sender {
[self.delegate stepOfRestoration:sender];
}
Parent.m
- (IBAction)stepOfRestoration:(id)sender {
// some code
}
Link长篇大论,但希望有用的教程,祝你好运。
答案 1 :(得分:0)
在Parent .m
中,您必须符合协议中定义的所有方法。在Parent.m文件中,协议中不存在buttonPressed
方法。因此,请使用buttonPressed
更新以下方法的名称,如下所示: -
在声明PopupDelegate方法时,在Popup.h
更新以下代码
- (IBAction)stepOfRestoration:(id)sender;
使用
-(void)buttonPressed;
答案 2 :(得分:0)
您不应在协议中添加IBAction方法
而是添加以下方法对应每个按钮操作
// Popup.h
@protocol PopupDelegate
@required
- (Void)stepOfRestoration:(id)sender;
- (Void)clientCall:(id)sender;
- (Void)readyTo:(id)sender;
- (Void)givePhone:(id)sender;
@end
并在相应的按钮操作方法中调用这些协议方法
e.g。 //Popup.m
- (IBAction)stepOfRestoration:(id)sender {
[self.delegate stepOfRestoration:sender];
}
和//Parent.m
-(Void)stepOfRestoration:(id)sender{
// code here
}