3.此时方法就开始封装好了,可以在需要的地方直接使用(弹框已作出)
- (void)alipay{
[self startProgress];
self.requestModel.pay_type = @"alipayMobile";
//自己后台的接口---拿到后台返回的数据作为第三方接口的参数
[self.viewModel requestCartSettlePay:self.requestModel callback:^(IOAResponse *response) {
dispatch_async(dispatch_get_main_queue(), ^{
[self stopProgress];
if (response.success) {
NSString *appScheme = @"IOAAlipaySDK";
self.payRequestModel.payString = response.responseObject;
self.payRequestModel.payType = 1;
self.payRequestModel.appScheme = appScheme;
//第三方接口调用(封装)
[[IOAPayApi defaultPayManager] pay:self.payRequestModel callback:^(IOAPayResponseModel *response) {
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *userInfo = response.userInfo;
if (![userInfo[@"resultStatus"] isEqualToString:@"9000"]) {
//进入待付款界面(支付失败或者支付取消等)
[self pushWait];
}else{
//进入订单列表界面(支付成功)
[self pushList];
}
});
}];
}else{
[self.view makeToast:@"支付失败"];
}
});
}];
}
4.重磅来临(一些人弹框没有作出,可以直接拷贝下面代码)
新建控制器控制弹框.h文件中
#import <UIKit/UIKit.h>
#import "IOAPayApi.h"
#import "IOAPayItemModel.h"
@interface IOAPayViewController : UIViewController
//点击第几行回调声明
@property (nonatomic, copy) void (^clickCallback)(NSInteger atIndex);
+ (instancetype)show;
//block回调方法
+ (instancetype)show:(void (^)(NSInteger atIndex))clickCallback;
+ (void)dismiss;
- (void)setupItemTitles:(NSArray <NSString *>*)titles;
- (void)setupItems:(NSArray <IOAPayItemModel *>*)items;
- (void)setupTitle:(NSString *)title;
@end
实现其方法.m文件中
#import "IOAPayViewController.h"
#define PayCellHeight 50
#define PaySectionHeaderHeight 44
@interface IOAPayViewController () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) CALayer *maskLayer;
@property (nonatomic, strong) UILabel *titleView;
@property (nonatomic, strong) UIView *payBgView;
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *dataSources;
@property (nonatomic, assign) CGFloat payViewHeight;
- (void)showPayView;
- (void)dismissPayView;
@end
@implementation IOAPayViewController
- (void)dealloc {
}
+ (instancetype)show {
UIViewController *rootvc = [UIApplication sharedApplication].keyWindow.rootViewController;
IOAPayViewController *vc = [IOAPayViewController new];
[rootvc addChildViewController:vc];
[rootvc.view addSubview:vc.view];
[vc setupItemTitles:@[@"微信支付", @"支付宝支付", @"银联支付"]];
[vc showPayView];
return vc;
}
+ (instancetype)show:(void (^)(NSInteger atIndex))clickCallback {
IOAPayViewController *vc = [self show];
vc.clickCallback = clickCallback;
return vc;
}
+ (void)dismiss {
UIViewController *rootvc = [UIApplication sharedApplication].keyWindow.rootViewController;
for (UIViewController *vc in rootvc.childViewControllers) {
if ([vc isKindOfClass:[IOAPayViewController class]]) {
IOAPayViewController *tempVC = (IOAPayViewController *)vc;
[tempVC dismissPayView];
return;
}
}
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor clearColor];
self.maskLayer.frame = self.view.bounds;
[self.view.layer addSublayer:self.maskLayer];
[self.view addSubview:self.payBgView];
// [self.view addSubview:self.tableView];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - UITableViewDataSource
- (NSInteger )numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.dataSources.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
id temp = self.dataSources[indexPath.row];
if ([temp isKindOfClass:[NSString class]]) {
cell.textLabel.text = temp;
}
else {
IOAPayItemModel *item = temp;
cell.textLabel.text = item.name;
}
cell.textLabel.font = [UIFont systemFontOfSize:18];
cell.textLabel.textColor = RGB_HEXString(@"#323232");
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
#pragma mark - UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return PayCellHeight;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return self.titleView;
}
- (CGFloat )tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return PaySectionHeaderHeight;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// IOAPayRequestModel *payRequestModel = [IOAPayRequestModel new];
// payRequestModel.payType = indexPath.row;
//// WS(weakSelf);
//// __weak typeof (self)weakSelf = self;
// __block IOAPayViewController *payVC = self;
// [[IOAPayApi defaultPayManager] pay:payRequestModel callback:^(IOAPayResponseModel *response) {
//// __strong __typeof (weakSelf)strongSelf = weakSelf;
// response.payType = indexPath.row;
// if (payVC.clickCallback) {
// payVC.clickCallback(response);
// payVC = nil;
// }
// }];
if (self.clickCallback) {
self.clickCallback(indexPath.row);
}
[self dismissPayView];
}
#pragma mark - Touches
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self dismissPayView];
}
#pragma mark - Public
- (void)setupItemTitles:(NSArray<NSString *> *)titles {
if (!titles.count) {
return ;
}
self.payViewHeight = titles.count * PayCellHeight + PaySectionHeaderHeight;
CGRect frame = self.view.frame;
frame.size.height = self.payViewHeight;
self.tableView.frame = frame;
[self.dataSources removeAllObjects];
[self.dataSources addObjectsFromArray:titles];
[self.tableView reloadData];
[self setPayViewFrame];
}
- (void)setupItems:(NSArray <IOAPayItemModel *>*)items {
if (!items.count) {
return ;
}
for (IOAPayItemModel *item in items) {
if ([item.code isEqualToString:@"appWeixinPay"]) {
item.payType = 0;
continue;
}
if ([item.code isEqualToString:@"alipayMobile"]) {
item.payType = 1;
continue;
}
if ([item.code isEqualToString:@"unionpay"]) {
item.payType = 2;
continue;
}
if ([item.code isEqualToString:@"ye"]) {
item.payType = 3;
continue;
}
item.payType = 3;
}
self.payViewHeight = items.count * PayCellHeight + PaySectionHeaderHeight;
CGRect frame = self.view.frame;
frame.size.height = self.payViewHeight;
self.tableView.frame = frame;
[self.dataSources removeAllObjects];
[self.dataSources addObjectsFromArray:items];
[self.tableView reloadData];
[self setPayViewFrame];
}
- (void)setupTitle:(NSString *)title {
self.titleView.text = title;
}
#pragma mark - Private
- (void)showPayView {
[self.view.layer removeAllAnimations];
CGFloat payBgViewHeight = self.payViewHeight + BottomHeightOffset;
CGRect frame = self.view.frame;
frame.origin.y = self.view.frame.origin.y + self.view.frame.size.height;
frame.size.height = payBgViewHeight;
self.payBgView.frame = frame;
frame.origin.y = self.view.frame.size.height - payBgViewHeight;
[UIView animateWithDuration:0.25 animations:^{
self.payBgView.frame = frame;
}];
}
- (void)setPayViewFrame {
CGFloat payBgViewHeight = self.payViewHeight + BottomHeightOffset;
CGRect frame = self.view.frame;
frame.origin.y = self.view.frame.origin.y + self.view.frame.size.height;
frame.size.height = payBgViewHeight;
frame.origin.y = self.view.frame.size.height - payBgViewHeight;
self.payBgView.frame = frame;
}
- (void)dismissPayView {
CGFloat payBgViewHeight = self.payViewHeight + BottomHeightOffset;
CGRect frame = self.view.frame;
frame.origin.y = self.view.frame.origin.y + self.view.frame.size.height;
frame.size.height = payBgViewHeight;
[UIView animateWithDuration:0.25 animations:^{
self.payBgView.frame = frame;
} completion:^(BOOL finished) {
[self.view removeFromSuperview];
[self removeFromParentViewController];
}];
}
#pragma mark - Setter / Getter
- (CALayer *)maskLayer {
if (_maskLayer == nil) {
_maskLayer = [CALayer layer];
_maskLayer.backgroundColor = [UIColor blackColor].CGColor;
_maskLayer.opacity = 0.2;
}
return _maskLayer;
}
- (UILabel *)titleView {
if (!_titleView) {
_titleView = [UILabel new];
_titleView.textAlignment = NSTextAlignmentCenter;
_titleView.text = @"请选择支付方式";
_titleView.font = [UIFont systemFontOfSize:16];
_titleView.textColor = [UIColor blackColor];
_titleView.backgroundColor = RGB_HEXString(@"#f2f2f2");//[UIColor whiteColor];
}
return _titleView;
}
- (UIView *)payBgView {
if (!_payBgView) {
_payBgView = [UIView new];
_payBgView.backgroundColor = [UIColor whiteColor];
[_payBgView addSubview:self.tableView];
}
return _payBgView;
}
- (UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.showsVerticalScrollIndicator = NO;
_tableView.showsHorizontalScrollIndicator = NO;
_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
_tableView.separatorColor = RGB_HEXString(@"#f2f2f2");
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[_tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([_tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[_tableView setLayoutMargins:UIEdgeInsetsZero];
}
//
[_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}
return _tableView;
}
- (NSMutableArray *)dataSources {
if (!_dataSources) {
_dataSources = [NSMutableArray array];
}
return _dataSources;
}
- (void)setPayViewHeight:(CGFloat)payViewHeight {
_payViewHeight = payViewHeight;
CGFloat height = self.view.frame.size.height * 0.6;
self.tableView.scrollEnabled = NO;
if (_payViewHeight > height) {
_payViewHeight = height;
self.tableView.scrollEnabled = YES;
}
}
@end










