iOS alert 和 actionSheet 的封装 BAAlert

MIT
Objective-C
iOS
2016-11-03
博爱1616

# BAAlert
[![BAHome Team Name](https://img.shields.io/badge/Team-BAHome-brightgreen.svg?style=flat)](https://github.com/BAHome "BAHome Team")
![](https://img.shields.io/badge/platform-iOS-red.svg) ![](https://img.shields.io/badge/language-Objective--C-orange.svg) 
![](https://img.shields.io/badge/license-MIT%20License-brightgreen.svg) 
![](https://img.shields.io/cocoapods/v/BAAlert.svg?style=flat) ![](https://img.shields.io/cocoapods/dt/BAAlert.svg
)  [![](https://img.shields.io/badge/微博-博爱1616-red.svg)](http://weibo.com/538298123)

## 1、功能及简介
* 1、手势触摸隐藏开关,可随时开关

* 2、可以自定义背景图片、背景颜色、按钮颜色
* 3、可以添加文字和图片,且可以滑动查看!
* 4、横竖屏适配完美,注意:自定义 alert 不支持横屏
* 5、有各种炫酷动画展示你的 alert
* 6、可以自定义每个按钮颜色

## 2、图片示例
![BAAlert1.gif](https://github.com/BAHome/BAAlert/blob/master/Images/BAAlert1.gif)
![BAAlert2.gif](https://github.com/BAHome/BAAlert/blob/master/Images/BAAlert2.gif)

## 3、安装、导入示例和源码地址
* 1、pod 导入【最新版本:![](https://img.shields.io/cocoapods/v/BAAlert.svg?style=flat) ![](https://img.shields.io/cocoapods/dt/BAAlert.svg
)】:

 `pod 'BAAlert'` ` pod 'BAAlert-Swift'`  

如果发现 `pod search BAAlert` 搜索出来的不是最新版本,需要在终端执行 cd 转换文件路径命令退回到 desktop,然后执行 `pod setup` 命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了。

具体步骤:
  - pod setup : 初始化
  - pod repo update : 更新仓库
  - pod search BAAlert
* 2、文件夹拖入:下载demo,把 BAAlert 文件夹拖入项目即可,

* 3、导入头文件:

`  #import "BAAlert_OC.h" `

* 4、项目源码地址:

 OC 版 :[https://github.com/BAHome/BAAlert](https://github.com/BAHome/BAAlert)

 swift 版 :[https://github.com/BAHome/BAAlert-Swift](https://github.com/BAHome/BAAlert-Swift)

## 4、BAAlert 的类结构及 demo 示例
![BAAlert.png](https://github.com/BAHome/BAAlert/blob/master/Images/BAAlert.png)

### BAAlert_OC.h
```
#ifndef BAAlert_OC_h
#define BAAlert_OC_h

#import "BAAlert.h"
#import "BAActionSheet.h"
#import "BAKit_ConfigurationDefine.h"

/*!
 *********************************************************************************
 ************************************ 更新说明 ************************************
 *********************************************************************************
 
 欢迎使用 BAHome 系列开源代码 !
 如有更多需求,请前往:https://github.com/BAHome
 
 项目源码地址:
 OC 版 :https://github.com/BAHome/BAAlert
 
 最新更新时间:2017-06-23 【倒叙】
 最新Version:【Version:1.2.2】
 更新内容:
 1.2.2.1、优化部分宏定义
 
 最新更新时间:2017-06-19 【倒叙】

 最新Version:【Version:1.2.0】

 更新内容:

 1.2.0.1、统一全局宏定义文件,优化代码规范  

 
 最新更新时间:2017-05-20 【倒叙】

 最新Version:【Version:1.1.9】

 更新内容:

 1.1.9.1、修复动画过度白屏问题  

 最新更新时间:2017-05-15 【倒叙】

 最新Version:【Version:1.1.8】

 更新内容:

 1.1.8.1、精简代码结构,删除多余或者重复代码  

 1.1.8.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅  

 1.1.8.3、重构 actionSheet,新增多种样式  

 
 最新更新时间:2017-05-13 【倒叙】

 最新Version:【Version:1.1.7】

 更新内容:

 1.1.7.1、精简代码结构,删除多余或者重复代码  

 1.1.7.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅  

 1.1.7.3、优化部分动画  

 1.1.7.4、subView 布局优化  

 1.1.7.5、actionSheet 新增自定义文字颜色、title 字体颜色  

 
 最新更新时间:2017-05-10 【倒叙】

 最新Version:【Version:1.1.5】

 更新内容:

 1.1.5.1、删除原有封装内部按钮点击事件中 ba_dismissAlertView 方法,此方法可在外部自由调用  

 
 最新更新时间:2017-05-09 【倒叙】

 最新Version:【Version:1.1.4】

 更新内容:

 1.1.4.1、pod 更新xib 文件

 
 最新更新时间:2017-05-08 【倒叙】
 最新Version:【Version:1.1.0】
 更新内容:
 1.1.0.1、优化方法名命名规范
 1.1.0.2、新增键盘内部处理
 1.1.0.3、用原生 autoLayout 重构,自定义 alert 的布局再也不是问题了
 1.1.0.4、优化代码结构,修复内在隐藏内存泄漏
 1.1.0.5、新增 BAAlert_OC.h 文件,只需导入 BAAlert_OC.h 一个文件就可以使用 alert 和 actionSheet 了
 1.1.0.6、删除了部分代码和属性,具体见源码 和 demo
 
 */

#endif /* BAAlert_OC_h */
```

### BAAlert.h
```
#import
#import "BAAlert_Config.h"

@class BAAlert;

typedef void(^BAAlert_ConfigBlock)(BAAlert *tempView);

@interface BAAlert : UIView

/*! 背景颜色 默认:半透明*/
@property (nonatomic, strong) UIColor *bgColor;

/*! 是否开启边缘触摸隐藏 alert 默认:NO */
@property (nonatomic, assign) BOOL isTouchEdgeHide;

/*! 背景图片名字 默认:没有图片*/
@property (nonatomic, strong) NSString *bgImageName;

/*! 是否开启进出场动画 默认:NO,如果 YES ,并且同步设置进出场动画枚举为默认值:1 */
@property (nonatomic, assign, getter=isShowAnimate) BOOL showAnimate;

/*! 进出场动画枚举 默认:1 ,并且默认开启动画开关 */
@property (nonatomic, assign) BAAlertAnimatingStyle animatingStyle;

/*! 背景高斯模糊枚举 默认:没有模糊效果 */
@property (nonatomic, assign) BAAlertBlurEffectStyle blurEffectStyle;

/*!
 *  创建一个完全自定义的 alertView,注意:【自定义 alert 只适用于竖屏状态!】
 *
 *  @param customView    自定义 View
 *  @param configuration 属性配置:如 bgColor、buttonTitleColor、isTouchEdgeHide...
 */
+ (void)ba_alertShowCustomView:(UIView *)customView
                 configuration:(BAAlert_ConfigBlock) configuration;

/*!
 *  创建一个类似于系统的alert
 *
 *  @param title         标题:可空
 *  @param message       消息内容:可空
 *  @param image         图片:可空
 *  @param buttonTitleArray  按钮标题:不可空
 *  @param buttonTitleColorArray  按钮标题颜色:可空,默认蓝色
 *  @param configuration 属性配置:如 bgColor、buttonTitleColor、isTouchEdgeHide...
 *  @param actionBlock        按钮的点击事件处理
 */
+ (void)ba_alertShowWithTitle:(NSString *)title
                      message:(NSString *)message
                        image:(UIImage *)image
             buttonTitleArray:(NSArray *)buttonTitleArray
        buttonTitleColorArray:(NSArray *)buttonTitleColorArray
                configuration:(BAAlert_ConfigBlock)configuration
                  actionBlock:(BAAlert_ButtonActionBlock)actionBlock;

/*!
 *  视图消失
 */
- (void)ba_alertHidden;

@end
```

### BAActionSheet.h
```
#import
#import "BAAlert_Config.h"

@class BAActionSheet, BAActionSheetModel;

typedef void(^BAActionSheet_ConfigBlock)(BAActionSheet *tempView);
typedef void (^BAActionSheet_ActionBlock)(NSIndexPath *indexPath, BAActionSheetModel *model);


@interface BAActionSheet : UIView

/*! 是否开启边缘触摸隐藏 alert 默认:YES */
@property (nonatomic, assign) BOOL isTouchEdgeHide;

/*! 是否开启进出场动画 默认:NO,如果 YES ,并且同步设置进出场动画枚举为默认值:1 */
@property (nonatomic, assign, getter=isShowAnimate) BOOL showAnimate;

/*! 进出场动画枚举 默认:1 ,并且默认开启动画开关 */
@property (nonatomic, assign) BAAlertAnimatingStyle animatingStyle;

/*! BAActionSheet 类型,默认:1 */
@property (nonatomic, assign) BAActionSheetType actionSheetType;

@property (nonatomic, strong) NSArray *dataArray;
@property (nonatomic, strong) NSString *title;

/*!
 *
 *  @param configuration 属性配置:如 bgColor、buttonTitleColor、isTouchEdgeHide...
 *  @param actionBlock   block回调点击的选项
 */
+ (void)ba_actionSheetShowWithConfiguration:(BAActionSheet_ConfigBlock)configuration
                                actionBlock:(BAActionSheet_ActionBlock)actionBlock;

/*!
 *  隐藏 BAActionSheet
 */
- (void)ba_actionSheetHidden;

@end

@class BAActionSheetSubContentModel;
@interface BAActionSheetModel : NSObject

@property(nonatomic, copy) NSString *imageUrl;
@property(nonatomic, copy) NSString *content;
@property(nonatomic, copy) NSString *subContent;
@property(nonatomic, strong) NSArray *subContentArray;

@end

@interface BAActionSheetSubContentModel : NSObject

@property(nonatomic, copy) NSString *subContent;

@end
```
### demo 示例
```
- (void)actionSheet1
{
    NSMutableArray *dataArray = [NSMutableArray array];
    NSArray *contentArray = @[@"微信支付", @"支付宝", @"预付款账户"];
    NSArray *subContentArray = @[@"", @"18588888888", @"余额:¥480.00"];
    NSArray *imageArray = @[@"123.png", @"背景.jpg", @"美女.jpg"];
    
    for (NSInteger i = 0; i < contentArray.count; i++)
    {
        BAActionSheetModel *model = [BAActionSheetModel new];
        model.imageUrl = imageArray[i];
        model.content = contentArray[i];
        model.subContent = subContentArray[i];
        
        [dataArray addObject:model];
    }
    BAKit_WeakSelf
    [BAActionSheet ba_actionSheetShowWithConfiguration:^(BAActionSheet *tempView) {
        
        BAKit_StrongSelf
        tempView.title = @"支付方式";
        tempView.dataArray = dataArray;
        tempView.isTouchEdgeHide = NO;
        tempView.showAnimate = YES;
        
        self.actionSheet = tempView;
    } actionBlock:^(NSIndexPath *indexPath, BAActionSheetModel *model) {
        BAKit_ShowAlertWithMsg_ios8(model.content);
    }];
}

- (void)actionSheet2
{
    NSMutableArray *dataArray = [NSMutableArray array];
    NSArray *contentArray = @[@"微信支付", @"支付宝", @"预付款账户"];

    for (NSInteger i = 0; i < contentArray.count; i++)
    {
        BAActionSheetModel *model = [BAActionSheetModel new];
//        model.imageUrl = imageArray[i];
        model.content = contentArray[i];
//        model.subContent = subContentArray[i];
        
        [dataArray addObject:model];
    }
    BAKit_WeakSelf
    [BAActionSheet ba_actionSheetShowWithConfiguration:^(BAActionSheet *tempView) {
        
        BAKit_StrongSelf
//        tempView.title = @"支付方式";
        tempView.dataArray = dataArray;
        tempView.actionSheetType = BAActionSheetTypeCustom;
        //        tempView.isTouchEdgeHide = NO;
        
        self.actionSheet = tempView;
    } actionBlock:^(NSIndexPath *indexPath, BAActionSheetModel *model) {
        BAKit_ShowAlertWithMsg_ios8(model.content);
    }];
}

- (void)actionSheet3
{
    NSArray *contentArray = @[@"微信支付", @"支付宝", @"预付款账户", @"中行"];
    NSArray *subContentArray = @[
                                            @[@"微信支付1", @"微信支付2", @"微信支付3"],
                                            @[@"支付宝1", @"支付宝2", @"支付宝3", @"支付宝4"],
                                            @[],
                                            @[@"中行1", @"中行2", @"中行3", @"中行4", @"中行5", @"中行6", @"中行7", @"中行2", @"中行3", @"中行4", @"中行5", @"中行6", @"中行7", @"中行2", @"中行3", @"中行4", @"中行5", @"中行6", @"中行7", @"中行2", @"中行3", @"中行4", @"中行5", @"中行6", @"中行7"]
                                            ];
    
    NSMutableArray *dataArray = @[].mutableCopy;
    for (NSInteger i = 0; i < contentArray.count; i++)
    {
        BAActionSheetModel *model = [BAActionSheetModel new];
        model.content = contentArray[i];
        
        NSMutableArray *mutArray = @[].mutableCopy;
        for (NSInteger j = 0; j < subContentArray[i].count; j ++)
        {
            BAActionSheetSubContentModel *subContentModel = [BAActionSheetSubContentModel new];
            subContentModel.subContent = subContentArray[i][j];
            [mutArray addObject:subContentModel];
        }
        model.subContentArray = mutArray;
        
        [dataArray addObject:model];
    }
    
    BAKit_WeakSelf
    [BAActionSheet ba_actionSheetShowWithConfiguration:^(BAActionSheet *tempView) {
        
        BAKit_StrongSelf
        tempView.title = @"支付方式";
        tempView.dataArray = dataArray;
        tempView.actionSheetType = BAActionSheetTypeExpand;
        //        tempView.isTouchEdgeHide = NO;
        
        self.actionSheet = tempView;
    } actionBlock:^(NSIndexPath *indexPath, BAActionSheetModel *model) {
        if (model.subContentArray.count > 0)
        {
            BAKit_ShowAlertWithMsg_ios8(model.subContentArray[indexPath.row].subContent);
        }
        else
        {
            BAKit_ShowAlertWithMsg_ios8(model.content);
        }
    }];
}


- (void)alert1
{
    BAKit_WeakSelf
    /*! 第一种封装使用示例 */
    [BAAlert ba_alertShowWithTitle:title0 message:titleMsg0 image:nil buttonTitleArray:@[@"取消",@"确定",@"确定2",@"确定3"] buttonTitleColorArray:@[[UIColor redColor], [UIColor greenColor], [UIColor grayColor], [UIColor purpleColor]] configuration:^(BAAlert *tempView) {
        BAKit_StrongSelf
        //        temp.bgColor       = [UIColor colorWithRed:0 green:1.0 blue:0 alpha:0.3];
        /*! 开启边缘触摸隐藏alertView */
        tempView.isTouchEdgeHide = YES;
        /*! 添加高斯模糊的样式 */
        tempView.blurEffectStyle = BAAlertBlurEffectStyleLight;
        /*! 开启动画 */
                tempView.showAnimate   = YES;
        //        /*! 进出场动画样式 默认为:1 */
        //        tempView.animatingStyle  = 1;
        self.alertView1 = tempView;
    } actionBlock:^(NSInteger index) {
        BAKit_StrongSelf
        [self.alertView1 ba_alertHidden];
        if (index == 1)
        {
            NSLog(@"点击了确定按钮!");
            ViewController2 *vc2 = [ViewController2 new];
            vc2.title = @"alert1";
            [self.navigationController pushViewController:vc2 animated:YES];
        }
    }];
}

- (void)alert2
{
//    /*! 2、自定义按钮颜色 */
    BAKit_WeakSelf
    [BAAlert ba_alertShowWithTitle:@"温馨提示:" message:titleMsg2 image:nil buttonTitleArray:@[@"取消", @"跳转VC2"] buttonTitleColorArray:@[[UIColor redColor], [UIColor greenColor]] configuration:^(BAAlert *tempView) {
        BAKit_StrongSelf
        /*! 自定义按钮文字颜色 */
        //    tempView.buttonTitleColor = [UIColor orangeColor];
        tempView.bgColor = [UIColor colorWithRed:1.0 green:1.0 blue:0 alpha:0.3];
        tempView.isTouchEdgeHide = YES;

        /*! 是否开启进出场动画 默认:NO,如果 YES ,并且同步设置进出场动画枚举为默认值:1 */
        tempView.showAnimate = YES;
        tempView.animatingStyle  = BAAlertAnimatingStyleShake;

        self.alertView2 = tempView;

    } actionBlock:^(NSInteger index) {
        BAKit_StrongSelf
        [self.alertView2 ba_alertHidden];
        if (index == 0)
        {
            NSLog(@"点击了取消按钮!");
        }
        else if (index == 1)
        {
            NSLog(@"点击了确定按钮!");
            ViewController2 *vc2 = [ViewController2 new];
            vc2.title = @"alert2";
            [self.navigationController pushViewController:vc2 animated:YES];
        }
    }];
}

- (void)alert3
{
    /*! 3、自定义背景图片 */
    BAKit_WeakSelf
    [BAAlert ba_alertShowWithTitle:@"温馨提示:" message:titleMsg1 image:nil buttonTitleArray:@[@"取消", @"确定"] buttonTitleColorArray:@[[UIColor redColor], [UIColor greenColor]] configuration:^(BAAlert *tempView) {
        BAKit_StrongSelf
        /*! 自定义按钮文字颜色 */
        //    tempView.buttonTitleColor = [UIColor orangeColor];
        /*! 自定义alert的背景图片 */
        tempView.bgImageName      = @"背景.jpg";
        /*! 开启动画,并且设置动画样式,默认:1 */
//        tempView.showAnimate = YES;
        
        /*! 没有开启动画,直接进出场动画样式,默认开启动画 */
        tempView.animatingStyle  = BAAlertAnimatingStyleFall;
        
        self.alertView3 = tempView;
    } actionBlock:^(NSInteger index) {
        BAKit_StrongSelf
        [self.alertView3 ba_alertHidden];
        if (index == 0)
        {
            NSLog(@"点击了取消按钮!");
        }
        else if (index == 1)
        {
            NSLog(@"点击了确定按钮!");
            ViewController2 *vc2 = [ViewController2 new];
            vc2.title = @"alert3";
            [self.navigationController pushViewController:vc2 animated:YES];
        }
    }];
}

- (void)alert4
{
    /*! 4、内置图片和文字,可滑动查看 */
    BAKit_WeakSelf
    [BAAlert ba_alertShowWithTitle:@"温馨提示:" message:titleMsg1 image:[UIImage imageNamed:@"美女.jpg"] buttonTitleArray:@[@"取消", @"跳转VC2"] buttonTitleColorArray:@[[UIColor redColor], [UIColor greenColor]] configuration:^(BAAlert *tempView) {
        BAKit_StrongSelf
        /*! 自定义按钮文字颜色 */
        //    tempView.buttonTitleColor = [UIColor orangeColor];
        /*! 自定义alert的背景图片 */
        tempView.bgImageName = @"背景.jpg";
        /*! 是否显示动画效果 */
        tempView.showAnimate = YES;
        self.alertView4 = tempView;
    } actionBlock:^(NSInteger index) {
        BAKit_StrongSelf
        [self.alertView4 ba_alertHidden];
        if (index == 0)
        {
            NSLog(@"点击了取消按钮!");
        }
        else if (index == 1)
        {
            NSLog(@"点击了确定按钮!");
            ViewController2 *vc2 = [ViewController2 new];
            vc2.title = @"alert4";
            [self.navigationController pushViewController:vc2 animated:YES];
        }
    }];
}

- (void)alert5
{
    /*! 5、完全自定义alert */
    _customView = [CustomView new];
    self.customView.frame = CGRectMake(50, SCREENHEIGHT - 300, SCREENWIDTH - 50 * 2, 162);

    BAKit_WeakSelf
    [BAAlert ba_alertShowCustomView:self.customView configuration:^(BAAlert *tempView) {
        BAKit_StrongSelf
        tempView.isTouchEdgeHide = YES;
        tempView.animatingStyle = BAAlertAnimatingStyleScale;
        self.alertView5 = tempView;
    }];
    
    self.customView.block = ^(NSInteger index) {
        BAKit_StrongSelf
        if (index == 1)
        {
            [self.alertView5 ba_alertHidden];
        }
    };
}

其他示例可下载demo查看源码!
```

## 5、更新记录:【倒叙】
 欢迎使用 [【BAHome】](https://github.com/BAHome) 系列开源代码 !
 如有更多需求,请前往:[【https://github.com/BAHome】](https://github.com/BAHome) 
 
 最新更新时间:2017-06-23 【倒叙】
 最新Version:【Version:1.2.2】
 更新内容:
 1.2.2.1、优化部分宏定义
 
 最新更新时间:2017-05-20 【倒叙】

 最新Version:【Version:1.1.9】

 更新内容:

 1.1.9.1、修复动画过度白屏问题  

 
 最新更新时间:2017-05-15 【倒叙】

 最新Version:【Version:1.1.8】

 更新内容:

 1.1.8.1、精简代码结构,删除多余或者重复代码  

 1.1.8.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅  

 1.1.8.3、重构 actionSheet,新增多种样式  

 
 最新更新时间:2017-05-13 【倒叙】

 最新Version:【Version:1.1.7】

 更新内容:

 1.1.7.1、精简代码结构,删除多余或者重复代码  

 1.1.7.2、规范代码属性和方法命名,原有方法名和属性名有较大改动,忘见谅  

 1.1.7.3、优化部分动画  

 1.1.7.4、subView 布局优化  

 1.1.7.5、actionSheet 新增自定义文字颜色、title 字体颜色  

 
 最新更新时间:2017-05-10 【倒叙】

 最新Version:【Version:1.1.5】

 更新内容:

 1.1.5.1、删除原有封装内部按钮点击事件中 ba_dismissAlertView 方法,此方法可在外部自由调用  

 
 最新更新时间:2017-05-09 【倒叙】

 最新Version:【Version:1.1.4】

 更新内容:

 1.1.4.1、pod 更新xib 文件

 
 最新更新时间:2017-05-08 【倒叙】
 最新Version:【Version:1.1.0】
 更新内容:
 1.1.0.1、优化方法名命名规范
 1.1.0.2、新增键盘内部处理
 1.1.0.3、用原生 autoLayout 重构,自定义 alert 的布局再也不是问题了
 1.1.0.4、优化代码结构,修复内在隐藏内存泄漏
 1.1.0.5、新增 BAAlert_OC.h 文件,只需导入 BAAlert_OC.h 一个文件就可以使用 alert 和 actionSheet 了
 1.1.0.6、删除了部分代码和属性,具体见源码 和 demo

## 6、bug 反馈
> 1、开发中遇到 bug,希望小伙伴儿们能够及时反馈与我们 BAHome 团队,我们必定会认真对待每一个问题!

> 2、以后提需求和 bug 的同学,记得把 git 或者博客链接给我们,我直接超链到你们那里!希望大家积极参与测试!
 

## 7、BAHome 团队成员
> 1、QQ 群 
479663605
 
【注意:此群为 2 元 付费群,介意的小伙伴儿勿扰!】
 

> 孙博岩
 
QQ:137361770
 
git:[https://github.com/boai](https://github.com/boai)

简书:[http://www.jianshu.com/u/95c9800fdf47](http://www.jianshu.com/u/95c9800fdf47)

微博:[![](https://img.shields.io/badge/微博-博爱1616-red.svg)](http://weibo.com/538298123)

> 马景丽
 
QQ:1253540493
 
git:[https://github.com/MaJingli](https://github.com/MaJingli)

> 陆晓峰
 
QQ:442171865
 
git:[https://github.com/zeR0Lu](https://github.com/zeR0Lu)

> 陈集
 
QQ:3161182978
 
git:[https://github.com/chenjipdc](https://github.com/chenjipdc)

简书:[http://www.jianshu.com/u/90ae559fc21d](http://www.jianshu.com/u/90ae559fc21d)

> 任子丰
 
QQ:459643690
 
git:[https://github.com/renzifeng](https://github.com/renzifeng)

> 吴丰收
 
QQ:498121294
 

> 石少庸
 
QQ:363605775
 
git:[https://github.com/CrazyCoderShi](https://github.com/CrazyCoderShi)

简书:[http://www.jianshu.com/u/0726f4d689a3](http://www.jianshu.com/u/0726f4d689a3)

## 8、开发环境 和 支持版本
> 开发使用 最新版本 Xcode,理论上支持 iOS 8 及以上版本,如有版本适配问题,请及时反馈!多谢合作!

## 9、感谢
> 感谢 BAHome 团队成员倾力合作,后期会推出一系列 常用 UI 控件的封装,大家有需求得也可以在 issue 提出,如果合理,我们会尽快推出新版本!

> BAHome 的发展离不开小伙伴儿的信任与推广,再次感谢各位小伙伴儿的支持!

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

iOS 学习笔记五 【2016年百度地图定位详细使用方法】

具体介和配置绍在此就不详述了,详情请看百度地图API文档, 在这里具体讲解下,新版百度地图的定位与反地理编码的使用: 1、导入头文件 #import <BaiduMapAPI_Map/BMKMapComponent.h> #im...

2016/11/03 18:06
7
0
HIVE 一行转多行输出办法

1.问题描述 hive UDF 格式:oc号1_an号1_次数;oc号2_an号2_次数 转换结果: oc号1 an号1 次数 oc号2 an号2 次数 一行转多行,一行转多列 2.实现思路 第一步分割:split('oc号1_an号1_次数;oc...

2015/03/21 10:18
140
0
Swift2.0与OC混编实验--动态库(一)

验证OC向Swift迁移过程中遇到的一系列混编问题的解决方案,并制作了一个Demo。

2016/01/17 10:38
463
1
iOS原生App与H5页面交互

第一种:JS给OC传值。 1. 技术方案:使用JavaScriptCore.framework框架 2. 使用场景: 网页中代码中的某个方法,比如点击事件方法,将该方法的参数传值给OC,供OC使用。 比如:携程APP中一个...

2016/10/22 11:08
638
0
OC与C语言的区别

C语言是面向过程的编程语言,而OC则是面向对象的编程语言。 面向对象:打个比方,就是你做一次菜,让老婆做个菜,吃饭,这就是面向对象,效率高 面向过程,就是每一个细节:比如你要先把或开到合适的...

2015/12/24 10:51
38
0
Object-C基础-01-概述

目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。

2016/03/16 15:58
41
1
OC对象 vs CF对象

OC对象 vs CF对象 在ARC场景下,对象所有权没有转换 使用__bridge关键字即可实现CF对象和OC对象之间的自由转换 OC对象转换为CF对象 调用CF框架的方法,所有权没有改变还是属于OC对象,对象的...

2018/07/13 12:51
78
0
Microsoft Office Communicator 2007无法通过搜索框检索到用户名的另一种简单解决办法

公司使用OC2007作为内部联系客户端,由于负责维护OC的人员离职,没人维护了~ 服务器证书同步问题造成(通讯薄文件GalContacts.db和GalContacts.db.idx无法同步)新安装OC无法通过搜索框检索...

2016/11/16 11:15
168
0
discuz集成opencart解决方案

discuz集成opencart解决方案

2014/09/07 09:53
125
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部