点击按钮后调用方法完成块

时间:2017-03-16 10:52:09

标签: ios objective-c xcode

我在一个单独的Class中创建了一个带有按钮的popupView。在弹出视图中点击按钮时,它应该进入完成处理程序。

实施例。 UIAlertAction actionWithTitle:...:handler ^ {}; 这将打开一个带有ok按钮的alertView。当点击按钮时,我开始在完成处理程序内工作。

是否可以像这样创建,如果是这样,我如何在Objective-C中创建它。

我知道如何使用@protocol创建并为类设置协议并调用方法。我需要将这个类用于许多视图控制器,所以我不想在我实现类的地方调用协议方法。

3 个答案:

答案 0 :(得分:3)

您可以尝试使用块(目标C)

使用块创建一个属性,在下面的代码中写下你创建了pop视图的代码。

@property (nonatomic, strong) void (^actionHandler)(void);

在按钮操作 -

- (IBAction)doneButtonAction:(id)sender {
     _actionHandler();
}

//显示popView时,定义处理程序

[popView setActionHandler:^{
        // DO Whatever you want, you just need to write this whenever you show pop view, rest code only once. 
}];

答案 1 :(得分:1)

使用完成处理程序创建函数

- Swift 3 -

func action(completion:@escaping (_:Bool) -> Void) {

}

action { (success) in

}

- 目标C -

- (void)action:(void (^)(bool success))completionHandler {

}

[self action:^(bool success) {

}];

答案 2 :(得分:1)

我创建了两个单独的类,ViewController.h和PopupViewController.h

请查看代码:

ViewController.h

rails generate devise User

ViewController.m

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController


@end

PopupViewController.h

#import "ViewController.h"
#import "PopupViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(IBAction)btnOkPressed:(id)sender
{
    PopupViewController *master=[PopupViewController sharedInstance];
    [self presentViewController:master animated:YES completion:^{

    }];
    [master callCompletion:^(NSString *str) {
        NSLog(@"%@",str);
        [master dismissViewControllerAnimated:YES completion:^{

        }];
    }];
}


@end

PopupViewController.m

#import <UIKit/UIKit.h>

typedef void(^Completionhandler)(NSString* str);

@interface PopupViewController : UIViewController

+(PopupViewController*)sharedInstance;
-(void)callCompletion:(Completionhandler)handler;

@end

我希望你有答案,如果你有任何疑问,请随时问我.. :)