Ios 将表单UIView委托给UIViewController
我有UIView,即所谓的从UIViewContorler(ParentVC)弹出和弹出 在UIView上,我有4个按钮。按下按钮时,需要从(ParentVC)打开新控制器。我在使用委托,是我的错误吗Ios 将表单UIView委托给UIViewController,ios,objective-c,uiview,uiviewcontroller,delegates,Ios,Objective C,Uiview,Uiviewcontroller,Delegates,我有UIView,即所谓的从UIViewContorler(ParentVC)弹出和弹出 在UIView上,我有4个按钮。按下按钮时,需要从(ParentVC)打开新控制器。我在使用委托,是我的错误吗 //Popup.h @protocol PopupDelegate @required - (IBAction)stepOfRestoration:(id)sender; - (IBAction)clientCall:(id)sender; - (IBAction)readyTo:(id)sen
//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;
这是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];
}
那么这是我的错误吗?您的协议中没有一个名为
按钮的方法,您需要在协议中调用一个方法,例如
//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;
Popup.m
- (IBAction)buttonPressed:(id)sender {
[self.delegate stepOfRestoration:sender];
}
Parent.m
- (IBAction)stepOfRestoration:(id)sender {
// some code
}
对于冗长但希望有用的教程,祝您好运。在您的父.m
中,您必须遵守协议中定义的所有方法。在父.m文件中,协议中不存在按下按钮的方法。因此,使用按下的按钮更新以下方法的名称,如下所示:-
声明PopupDelegate方法时,在Popup.h
更新下面的代码
与
您不应该在协议中添加IBAction方法
相反,添加与每个按钮操作对应的以下方法
//弹出窗口.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
}
if([delegate respondsToSelector:@selector(buttonPressed)]){[delegate buttonPressed];}
进行类似检查,查看控件是否位于if循环内。
- (IBAction)stepOfRestoration:(id)sender {
[self.delegate stepOfRestoration:sender];
}
-(Void)stepOfRestoration:(id)sender{
// code here
}