将表单UIView委托给UIViewController

时间:2016-09-09 08:54:01

标签: ios objective-c uiview uiviewcontroller delegates

我有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];
}

那是我的错误吗?

3 个答案:

答案 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
}