我在一个单独的Class中创建了一个带有按钮的popupView。在弹出视图中点击按钮时,它应该进入完成处理程序。
实施例。 UIAlertAction actionWithTitle:...:handler ^ {}; 这将打开一个带有ok按钮的alertView。当点击按钮时,我开始在完成处理程序内工作。
是否可以像这样创建,如果是这样,我如何在Objective-C中创建它。
我知道如何使用@protocol创建并为类设置协议并调用方法。我需要将这个类用于许多视图控制器,所以我不想在我实现类的地方调用协议方法。
答案 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
我希望你有答案,如果你有任何疑问,请随时问我.. :)