Ios 将表单UIView委托给UIViewController

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

我有UIView,即所谓的从UIViewContorler(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;
这是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
}