欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS支付寶、微信、銀聯(lián)支付集成封裝調(diào)用(下)

 更新時間:2018年04月30日 10:58:51   投稿:laozhang  
本篇文章通過代碼實例給大家講述了iOS支付寶、微信、銀聯(lián)支付集成封裝調(diào)用,對此有需要的朋友可以測試參考下。

一.越來越多的app增加第三方的功能,可能app有不同的頁面但調(diào)用相同的支付方式,例如界面如下:

這兩個頁面都會使用第三方支付支付:(微信,支付寶,銀聯(lián))如果在每一個頁面都直接調(diào)用第三方支付的接口全部代碼,顯然并不是很合適,更何況,可能一個app并不止兩個入口。所以封裝還是很有必要的。

1.新建Model:-------后臺返回支付方式的列表json

#import <Foundation/Foundation.h>

@interface IOAPayItemModel : NSObject

//name:代表是支付寶,微信,銀聯(lián)或者余額等
@property (nonatomic, copy) NSString *name;
//icon:代表是支付方式的圖片
@property (nonatomic, copy) NSString *icon;
//code:代表支付方式的唯一標(biāo)識
@property (nonatomic, copy) NSString *code;
//payType:代表支付類型(自己確定的)
@property (nonatomic, assign) NSInteger payType;
@end
#import "IOAPayItemModel.h"
@implementation IOAPayItemModel
@end

2.封裝第三方支付接口以及回調(diào)接口-----直接上源代碼----會有解釋(相信大家的能力,肯定能看懂)

#import <Foundation/Foundation.h>
//支付寶SDK
#import <AlipaySDK/AlipaySDK.h>
//微信接口
#import <WXApi.h>
//銀聯(lián)接口
#import "UPPaymentControl.h"

/**
 枚舉:列出第三方支付方式
 */
typedef NS_ENUM(NSInteger, PayType) {
 kPayTypeWXPay, // 微信支付
 kPayTypeALiPay, // 支付寶支付
 kPayTypeUNPay // 銀聯(lián)支付
};


/**
 IOAPayRequestModel:第三方支付需要的參數(shù)
 */
@interface IOAPayRequestModel: NSObject
@property (nonatomic, assign) PayType payType;

/**
 支付寶和銀聯(lián)-后臺返回是字符串類型----支付寶和銀聯(lián)使用此方式
 */
@property (nonatomic, copy) NSString *payString;
@property (nonatomic, copy) NSString *appScheme; // 根據(jù)設(shè)置的paytype設(shè)置

/**
 微信-后臺返回是字典類型--- 微信使用此方式
 */
@property (nonatomic, strong) NSDictionary *userInfo;
@end


/**
 第三方支付接口返回的數(shù)據(jù)---
 */
@interface IOAPayResponseModel: NSObject
@property (nonatomic, assign) PayType payType;

//result和userInfo信息判斷支付結(jié)果--(支付成功、支付失敗、支付取消等)
@property (nonatomic, assign) NSInteger result;
@property (nonatomic, strong) NSDictionary *userInfo;
@end

@interface IOAPayApi : NSObject

//支付返回的回調(diào)方法
@property (nonatomic, copy) void (^callback)(IOAPayResponseModel *response);

//支付請求model ----IOAPayRequestModel---第三方支付需要的參數(shù)
@property (nonatomic, strong) IOAPayRequestModel *payRequestModel;

//單例方法
+ (instancetype)defaultPayManager;

// 是否安裝了客戶端
- (BOOL)isPayAppInstalled:(PayType)payType;
// 支付
- (void)pay:(IOAPayRequestModel *)payRequestModel callback:(void (^)(IOAPayResponseModel *response))callback;

// 支付回調(diào)
- (void)payCallbackWithUrl:(NSURL *)url;
@end
#import "IOAPayApi.h"

@implementation IOAPayRequestModel

- (void)setPayType:(PayType)payType {
 _payType = payType;
 if (_payType == kPayTypeALiPay) {
 self.appScheme = @"IOAAlipaySDK";
 // 測試
// self.payString = @"alipay_sdk=1.0&app_id=2018012502067343&biz_content=%7B%22subject%22%3A%22%E6%94%AF%E4%BB%98%E5%AE%9D%E6%94%AF%E4%BB%98%22%2C%22out_trade_no%22%3A%222018032100007%22%2C%22total_amount%22%3A%220.01%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22timeout_express%22%3A%2210m%22%2C%22seller_id%22%3A%222088001065568658%22%7D&charset=UTF-8&format=json&method=alipay.trade.app.pay&notify_url=api.ioa365.net%2Fapp%2Fapi%2FPayment%2Falipay_notify&sign_type=RSA2&timestamp=2018-03-21+16%3A59%3A15&version=1.0&sign=SFyiWFqdkG98qarJFKfNjts8w2RS7ATwjCRyNnKYILDaVVFEnR%2F943QjK9WFaZgipx38rZuRf%2Bl4M74Hp2PO%2F%2F0ZfSKAntTU3DMLIVgt4YD42W1F2lOP3iXtkL5BHpPzt6YfDQueCz1zReeAWQXlyBDvvnjbJ9p67f2jt8jfqM6Enz6kWwY5cShyDD6iJQF0FKXdmSYA%2BiCO6IIHdiqKsRLHuBPb8lfSxJyY1%2FbaAUysIB3%2BiU6HWASUGadCVL769ivwHKwdjZQZUoFpjcfnneyZG3%2B4f%2FnlBrY1pKk3ZWy2UqpTtk0w0GofsF167dRz47J0lW7UufyM8uA%2BIhZ7Lw%3D%3D";
 
 return;
 }
 
 if (_payType == kPayTypeUNPay) {
 self.appScheme = @"UPPay";
 
 // 測試
// self.payString = @"559018436594292239101";
 
 return;
 }
 
 // 測試
// self.userInfo = @{
//     @"appid":@"wx66a3135d1354b23b",
//     @"noncestr":@"J8pJbaEg6AjDQ9kk",
//     @"partnerid":@"1497576612",
//     @"prepayid":@"wx20180321170621b3fbce61a20187009040",
//     @"result_code":@"SUCCESS",
//     @"return_code":@"SUCCESS",
//     @"return_msg":@"OK",
//     @"sign":@"29FFF7B63A71D3FB4C6866BDBC443F72",
//     @"timestamp":@"1521623180",
//     @"trade_type":@"APP",
//     };
}
@end

@implementation IOAPayResponseModel

@end

@interface IOAPayApi() <WXApiDelegate>

@end

@implementation IOAPayApi

//單例方法
static IOAPayApi *manager = nil;
+ (instancetype)defaultPayManager {
 static dispatch_once_t onceToken;
 dispatch_once(&onceToken, ^{
 manager = [IOAPayApi new];
 });
 return manager;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
 static dispatch_once_t onceToken;
 dispatch_once(&onceToken, ^{
 manager = [super allocWithZone:zone];
 });
 
 return manager;
}

//copy在底層 會調(diào)用copyWithZone:
- (instancetype)copyWithZone:(NSZone *)zone {
 return [[self class] defaultPayManager];
}
+ (instancetype)copyWithZone:(struct _NSZone *)zone {
 return [self defaultPayManager];
}
+ (instancetype)mutableCopyWithZone:(struct _NSZone *)zone {
 return [self defaultPayManager];
}
- (instancetype)mutableCopyWithZone:(NSZone *)zone {
 return [[self class] defaultPayManager];
}

#pragma mark - WeiChatPayDelegate
- (void)onResp:(BaseResp *)resp {
 //啟動微信支付的response
 if (self.payRequestModel.payType == kPayTypeWXPay) {
 if (self.callback) {
  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];
  payResponseModel.result = 0;
  if([resp isKindOfClass:[PayResp class]]){
  //支付返回結(jié)果,實際支付結(jié)果需要去微信服務(wù)器端查詢
  switch (resp.errCode) {
   case 0:
//   payResoult = @"支付結(jié)果:成功!";
   payResponseModel.result = 1;
   break;
   case -1:
   payResponseModel.result = 0;
   break;
   case -2:
   payResponseModel.result = 0;
   break;
   default:
   break;
  }
  }
  
  self.callback(payResponseModel);
 }
 }
}

#pragma mark - Public

// 是否安裝了客戶端
- (BOOL)isPayAppInstalled:(PayType)payType {
 switch (payType) {
 case kPayTypeWXPay:
  return [WXApi isWXAppInstalled];
  break;
  
 case kPayTypeALiPay:
  // 未提供接口 返回NO
  return NO;
  break;
 case kPayTypeUNPay:
  return [[UPPaymentControl defaultControl] isPaymentAppInstalled];
  break;
 default:
  break;
 }
 
 return NO;
}

- (void)pay:(IOAPayRequestModel *)payRequestModel callback:(void (^)(IOAPayResponseModel *response))callback {
 if (!payRequestModel) return;
 self.callback = callback;
 self.payRequestModel = payRequestModel;
 
 switch (payRequestModel.payType) {
 case kPayTypeWXPay:
  [self wxPay:payRequestModel];
  break;
  
 case kPayTypeALiPay:
  [self aliPay:payRequestModel];
  break;
 case kPayTypeUNPay:
  [self unPay:payRequestModel];
  break;
 default:
  break;
 }
}

// 支付回調(diào)
- (void)payCallbackWithUrl:(NSURL *)url {
 // 其他如支付等SDK的回調(diào)
 if ([url.host isEqualToString:@"safepay"]) {
 [self aliPayCallback:url];
 }
 else if ([url.host isEqualToString:@"pay"]) {
 // 處理微信的支付結(jié)果
 [self wxPayCallback:url];
 }
 else if ([url.host isEqualToString:@"uppayresult"]) {
 [self unPayCallback:url];
 }
}

#pragma mark - Pay

// 微信支付
- (void)wxPay:(IOAPayRequestModel *)payRequestModel {
 PayReq *req = [[PayReq alloc] init];
 NSDictionary *dataDic = payRequestModel.userInfo;
 //由用戶微信號和AppID組成的唯一標(biāo)識,用于校驗微信用戶
 req.openID = dataDic[@"appid"];
 // 商家id,在注冊的時候給的
 req.partnerId = dataDic[@"partnerid"];
 // 預(yù)支付訂單這個是后臺跟微信服務(wù)器交互后,微信服務(wù)器傳給你們服務(wù)器的,你們服務(wù)器再傳給你
 req.prepayId = dataDic[@"prepayid"];
 // 根據(jù)財付通文檔填寫的數(shù)據(jù)和簽名
 req.package = @"Sign=WXPay";
 // 隨機編碼,為了防止重復(fù)的,在后臺生成
 req.nonceStr = dataDic[@"noncestr"];
 // 這個是時間戳,也是在后臺生成的,為了驗證支付的
 NSString * stamp = dataDic[@"timestamp"];
 req.timeStamp = stamp.intValue;
 // 這個簽名也是后臺做的
 req.sign = dataDic[@"sign"];
 //發(fā)送請求到微信,等待微信返回onResp
 [WXApi sendReq:req];
}

// 支付寶
- (void)aliPay:(IOAPayRequestModel *)payRequestModel {
 NSString *appScheme = payRequestModel.appScheme;
 NSString *payString = payRequestModel.payString;
 
 __weak __typeof(self)weakSelf = self;
 [[AlipaySDK defaultService] payOrder:payString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
 if (weakSelf.payRequestModel.payType == kPayTypeALiPay) {
  if (weakSelf.callback) {
  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];
  payResponseModel.userInfo = resultDic;
  payResponseModel.result = [resultDic[@"result"] integerValue];
  weakSelf.callback(payResponseModel);
  }
 }
 }];
}

// 銀聯(lián)支付
- (void)unPay:(IOAPayRequestModel *)payRequestModel {
 NSString *appScheme = payRequestModel.appScheme;
 NSString *payString = payRequestModel.payString;
 [[UPPaymentControl defaultControl] startPay:payString fromScheme:appScheme mode:@"01" viewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}

//////
- (void)wxPayCallback:(NSURL *)url {
 //跳轉(zhuǎn)支付寶錢包進行支付,處理支付結(jié)果
 [WXApi handleOpenURL:url delegate:self];
}

- (void)aliPayCallback:(NSURL *)url {
 __weak typeof(self)weakSelf = self;
 [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
 if (weakSelf.payRequestModel.payType == kPayTypeALiPay) {
  if (weakSelf.callback) {
  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];
  payResponseModel.userInfo = resultDic;
  payResponseModel.result = [resultDic[@"result"] integerValue];
  weakSelf.callback(payResponseModel);
  }
 }
 }];
}

- (void)unPayCallback:(NSURL *)url {
 __weak typeof(self)weakSelf = self;
 [[UPPaymentControl defaultControl]handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) {
 if (weakSelf.payRequestModel.payType == kPayTypeUNPay) {
  if (weakSelf.callback) {
  IOAPayResponseModel *payResponseModel = [IOAPayResponseModel new];
  payResponseModel.userInfo = data;
  if ([code isEqualToString:@"success"]) {
   [[NSNotificationCenter defaultCenter] postNotificationName:@"YINLIANPAYS" object:nil];
   payResponseModel.result = [code boolValue];
  }
  else if([code isEqualToString:@"fail"]) {
   //交易失敗
   [[NSNotificationCenter defaultCenter] postNotificationName:@"YINLIANPAYF" object:nil];
   payResponseModel.result = [code boolValue];
  }
  else if([code isEqualToString:@"cancel"]) {
   //交易取消
   [[NSNotificationCenter defaultCenter] postNotificationName:@"YINLIANPAYC" object:nil];
   payResponseModel.result = 0;
  }
  
  weakSelf.callback(payResponseModel);
  }
 }
 }];
}
@end

3.此時方法就開始封裝好了,可以在需要的地方直接使用(彈框已作出)

- (void)alipay{
 [self startProgress];
 self.requestModel.pay_type = @"alipayMobile";
 //自己后臺的接口---拿到后臺返回的數(shù)據(jù)作為第三方接口的參數(shù)
 [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;
  //第三方接口調(diào)用(封裝)
  [[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
//點擊第幾行回調(diào)聲明
@property (nonatomic, copy) void (^clickCallback)(NSInteger atIndex);

+ (instancetype)show;
//block回調(diào)方法
+ (instancetype)show:(void (^)(NSInteger atIndex))clickCallback;
+ (void)dismiss;

- (void)setupItemTitles:(NSArray <NSString *>*)titles;
- (void)setupItems:(NSArray <IOAPayItemModel *>*)items;

- (void)setupTitle:(NSString *)title;
@end

實現(xiàn)其方法.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:@[@"微信支付", @"支付寶支付", @"銀聯(lián)支付"]];
 [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

舉例方法

利用請求的數(shù)據(jù)進行賦值傳值。

IOAOrderBaseModel *dataSourceModel = self.dataSource[indexPath.section];
  IOAOrderSelectAbleItemModel *itemModel = (IOAOrderSelectAbleItemModel *) dataSourceModel.items[row];
  IOAPayViewController *vc = [IOAPayViewController show:^(NSInteger atIndex) {
  IOAPayItemModel *payItem = itemModel.items[atIndex];
  itemModel.selectedIndex = atIndex;
  
  weakSelf.requestModel.pay_type = payItem.code;
  weakSelf.payItem = payItem;
  
  [weakSelf.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationNone];
  }];
  [vc setupItems:self.confirmOrderInfo.payment_list];
  [vc setupTitle:@"請選擇支付方式"];

最后的舉例方法并不是所有的適用,對于上面1.2.3還是可以直接拿過去使用,這些都是原創(chuàng),如果第一次接入還是希望各位讀者讀一下上篇文章,集成的整個過程,鏈接為http://www.dbjr.com.cn/article/139186.htm,這個代碼的整個demo。

相關(guān)文章

  • iOS實現(xiàn)獲取系統(tǒng)iTunes音樂的方法示例

    iOS實現(xiàn)獲取系統(tǒng)iTunes音樂的方法示例

    這篇文章主要給大家介紹了關(guān)于iOS如何實現(xiàn)獲取系統(tǒng)iTunes音樂的相關(guān)資料,文中通過示例代碼給大家詳細介紹了實現(xiàn)的方法,并給大家介紹了MPMediaPickerController的相關(guān)知識,對大家的學(xué)習(xí)或者工作具有一定的幫助,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • iOS 驗證碼按鈕倒計時功能

    iOS 驗證碼按鈕倒計時功能

    在app注冊或者登錄需要驗證碼的地方、為了避免短時間內(nèi)刷驗證碼、往往會加上一層驗證當(dāng)?shù)褂嫊r結(jié)束后、可以重新獲取,關(guān)于ios 驗證碼按鈕倒計時功能大家可以參考下本文
    2017-07-07
  • iOS實現(xiàn)動態(tài)自適應(yīng)標(biāo)簽

    iOS實現(xiàn)動態(tài)自適應(yīng)標(biāo)簽

    這篇文章主要為大家詳細介紹了iOS動態(tài)自適應(yīng)標(biāo)簽的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Objective-C 宏定義詳細介紹

    Objective-C 宏定義詳細介紹

    這篇文章主要介紹了Objective-C 宏定義詳細介紹的相關(guān)資料,這樣開發(fā)起來,更有效率,更好,更簡潔,需要的朋友可以參考下
    2016-10-10
  • iOS動態(tài)調(diào)整UILabel高度的幾種方法

    iOS動態(tài)調(diào)整UILabel高度的幾種方法

    在iOS編程中UILabel是一個常用的控件,下面這篇文章主要給大家介紹了關(guān)于iOS動態(tài)調(diào)整UILabel高度的幾種方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 在iOS10系統(tǒng)中微信后退無法發(fā)起ajax請求的問題解決辦法

    在iOS10系統(tǒng)中微信后退無法發(fā)起ajax請求的問題解決辦法

    這篇文章主要介紹了在iOS10系統(tǒng)中微信后退無法發(fā)起ajax請求的問題解決辦法,一般可以通過延時發(fā)送請求解決,下面通過本文給大家分享下解決辦法,需要的朋友參考下吧
    2017-01-01
  • iOS中containsString和rangeOfString的區(qū)別小結(jié)

    iOS中containsString和rangeOfString的區(qū)別小結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于iOS中containsString和rangeOfString的一些區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • iOS runtime知識梳理

    iOS runtime知識梳理

    本文主要對iOS runtime的知識進行梳理。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • iOS?Swift?Lazy?var?View失效問題解決

    iOS?Swift?Lazy?var?View失效問題解決

    這篇文章主要為大家介紹了iOS?Swift?Lazy?var?View失效問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 解決ios端點擊按鈕閃爍問題(小tips)

    解決ios端點擊按鈕閃爍問題(小tips)

    這篇文章主要介紹了ios端點擊按鈕閃爍的解決方法(小tips),需要的朋友參考下吧
    2017-10-10

最新評論