BBADialog.h 9.06 KB
//
//  BBADialog.h
//  BBAPods-BBAUIKit
//
//  Created by hulinling on 2017/11/15.
//  Copyright © 2017年 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BBADialogItem.h"
#import "BBADialogConfigItem.h"
#import "BBADialogGlobalConfig.h"

/// 弹窗hide时所发送的通知 (该通知同时,会将当前的弹窗对象通过notification.object传出)
extern NSString * const BBADialogNotificationDidHided;

@interface BBADialog : NSObject

@property (nonatomic, readonly, strong) UIWindow *window;

#pragma mark - 主题环绕方法
/// 若要在指定主题里展示,则在调用dialog展示的相关方法需放到该方法中的task block中执行;反之,dialog跟随当前APP的主题
/// @param mode 指定主题
/// @param task 待执行的任务
+ (void)runInTheme:(NSString *)mode withTask:(void(^)(void))task;

/// 设置弹窗全局配置信息,同时返回旧的全局配置信息
/// @param globalConfig 新的弹窗全局配置信息
+ (BBADialogGlobalConfig *)setGlobalConfig:(BBADialogGlobalConfig *)globalConfig;

#pragma mark - 便捷方法

#pragma mark -- 运营类弹窗  (该样式的弹窗,不支持横屏)
/// 展示图片运营类弹窗 (该形式的弹窗,视觉对大小有明确限制,因此该样式的弹窗所展示的图片区域的size是固定的)
/// @param image 待展示的图片
/// @param closeStyle 关闭按钮的风格
/// @param closeBlock 关闭按钮点击回调
+ (instancetype)showWithTipImage:(UIImage *)image
                      closeStyle:(BBADialogCloseStyle)closeStyle
                      closeBlock:(void(^)(void))closeBlock;

/// 展示图片运营类弹窗 (该形式的弹窗,视觉对大小有明确限制,因此该样式的弹窗所展示的图片区域的size是固定的)
/// @param image 待展示的图片
/// @param clickBlock 图片点击的响应处理(若指定了该参数,在点击图片区域之后,弹窗会根据该block的返回值来决定是否自动隐藏)
/// @param closeStyle 关闭按钮的风格
/// @param closeBlock 关闭按钮点击回调
+ (instancetype)showWithTipImage:(UIImage *)image
                 imageClickBlock:(BOOL(^)(void))clickBlock
                      closeStyle:(BBADialogCloseStyle)closeStyle
                      closeBlock:(void(^)(void))closeBlock;

/// 展示自定义视图类运营类弹窗 (该形式的弹窗,内容区域的大小完全由tipCustomView决定)
/// @param tipCustomView 自定义样式的视图
/// @param closeStyle 关闭按钮的风格
/// @param closeBlock 关闭按钮点击回调
+ (instancetype)showWithTipCustomView:(UIView *)tipCustomView
                           closeStyle:(BBADialogCloseStyle)closeStyle
                           closeBlock:(void(^)(void))closeBlock;

/// 展示图片运营类弹窗 (该形式的弹窗,视觉对大小有明确限制,因此该样式的弹窗所展示的图片区域的size是固定的)
/// @param image 待展示的图片 (展示图片区域的size是固定的,以6P为准,其size为:331 * 390)
/// @param showClose 是否展示底部关闭按钮
/// @param closeBlock 关闭按钮点击回调
+ (instancetype)showWithTipImage:(UIImage *)image
                       showClose:(BOOL)showClose
                      closeBlock:(void(^)(void))closeBlock __deprecated_msg("请使用showWithTipImage:closeButtonStyle:closeBlock代替");

/// 展示图片运营类弹窗 (该形式的弹窗,视觉对大小有明确限制,因此该样式的弹窗所展示的图片区域的size是固定的)
/// @param image 待展示的图片
/// @param clickBlock 图片点击的响应处理(若指定了该参数,在点击图片区域之后,弹窗会根据该block的返回值来决定是否自动隐藏)
/// @param showClose 是否展示底部关闭按钮
/// @param closeBlock 关闭按钮点击回调
+ (instancetype)showWithTipImage:(UIImage *)image
                 imageClickBlock:(BOOL(^)(void))clickBlock
                       showClose:(BOOL)showClose
                      closeBlock:(void(^)(void))closeBlock __deprecated_msg("请使用showWithTipImage:imageClickBlock:closeStyle:closeBlock代替");

/// 展示自定义视图类运营类弹窗 (该形式的弹窗,内容区域的大小完全由tipCustomView决定)
/// @param tipCustomView 自定义样式的视图
/// @param showClose 是否展示底部关闭按钮
/// @param closeBlock 关闭按钮点击回调
+ (instancetype)showWithTipCustomView:(UIView *)tipCustomView
                            showClose:(BOOL)showClose
                           closeBlock:(void(^)(void))closeBlock __deprecated_msg("请使用showWithTipCustomView:imageClickBlock:closeStyle:closeBlock代替");

#pragma mark -- Alert形式弹窗 (该样式的弹窗,支持横屏)

/// 展示Alert形式弹窗
/// @param title 标题 (若不设置,则不展示标题区域)
/// @param contentInfo 内容 (若不设置,则不展示内容区域)
/// @param buttonItems 操作按钮 (若不设置,则不展示按钮区域)
///
/// @note
/// 1,若需要自定义标题或内容文案的颜色,可使用如下方法:
/// @code showWithTitle:titleColor:contentInfo:contentColor:buttonItems:
/// @endcode
/// 2,Alert形式弹窗,支持内容区域可自定义,若需要自定义视图,可使用通用方法:
/// @code showWithItems:
/// @endcode
+ (instancetype)showWithTitle:(NSString *)title
                  contentInfo:(NSString *)contentInfo
                  buttonItems:(NSArray<BBADialogButtonItem *> *)buttonItems;

/// 展示alert类弹窗
/// @param title 标题
/// @param titleColor 标题文本色号 (!!! 该属性应该传递具体色值的色号,若直接传递色值(色值支持alpha,最后2位代表alpha,即:RRGGBBAA),则不会随主题切换色值 !!!)
/// @param contentInfo 内容
/// @param contentColor 内容文本色号 (!!! 该属性应该传递具体色值的色号,若直接传递色值(色值支持alpha,最后2位代表alpha,即:RRGGBBAA),则不会随主题切换色值 !!!)
/// @param buttonItems 按钮
+ (instancetype)showWithTitle:(NSString *)title
                   titleColor:(NSString *)titleColor
                  contentInfo:(NSString *)contentInfo
                 contentColor:(NSString *)contentColor
                  buttonItems:(NSArray<BBADialogButtonItem *> *)buttonItems;

#pragma mark - 通用方法
/// 展示弹窗的通用方法
/// @param items 弹窗的样式,将以指定的items进行布局
/// @note
/// 1, 若需要以运营类弹窗样式展示,则items里须只包含一个item,即:BBADialogTipItem
/// 2, 若需要以Alert样式展示,则根据需要,配置标题、内容、按钮区域,对应的item为:BBADialogTitleItem、BBADialogContentItem、BBADialogButtonItem
+ (instancetype)showWithItems:(NSArray<BBADialogItem *> *)items;

/// 展示弹窗的通用方法(可配置展示动画、横竖屏配置)
/// @param items 弹窗的样式,将以指定的items进行布局 (当items里的只包含一个item,且为 BBADialogTipItem 时,则按提示样式展示(该方式不支持横屏);反之,按alert样式展示,且忽略items中的BBADialogTipItem)
/// @param configItem 用于指定横竖屏配置(通常情况,不需要设置该值,弹窗组件有自己的横竖屏逻辑:只有Alert样式的支持横屏)
/// @param showAnimationType 用于指定展示动画(当为BBADialogShowAnimationType_Default时,走弹窗组件自身规定的效果)
+ (instancetype)showWithItems:(NSArray<BBADialogItem *> *)items
                   configItem:(BBADialogConfigItem *)configItem
            showAnimationType:(BBADialogShowAnimationType)showAnimationType;

/// 是否有弹框展示
+ (BOOL)isShow;

/// 手动隐藏对话框
- (void)hide;

/// 手动隐藏对话框
/// @param animated 是否带动画
- (void)hide:(BOOL)animated;

/// 手动再次显示之前hide的对话框
/// @param showAnimationType 展示动画类型
- (void)show:(BBADialogShowAnimationType)showAnimationType;

/// 更新指定按钮信息
/// @param specifyButtonItem 指定待更新的按钮item(该item必须是用于初始化弹窗所用BBADialogButtonItem才生效)
- (void)updateButtonItem:(BBADialogButtonItem *)specifyButtonItem;

@end


@interface BBADialog (Assist)
/// 对话框宽度
+ (CGFloat)DialogWidth;

/// Alert形式的对话框的内容区域最大宽度
+ (CGFloat)DialogAlertContentMaxWidth;

/// Alert形式的对话框的内容可视区域的最大高度(超过这个高度,内容会被加载scrollView上)
/// @param useCustomContent 是否使用自定内容视图
/// @param ignore 是否忽略默认的内容边距
+ (CGFloat)DialogAlertContentMaxHeightUseCustomContent:(BOOL)useCustomContent
                                  ignoreDefaultPadding:(BOOL)ignore;

/// Alert形式的对话框的按钮的蓝色字颜色
+ (NSString *)DialogButtonBlueColor;

/// Alert形式的对话框的按钮的红色字颜色
+ (NSString *)DialogButtonRedColor;

/// 弹窗屏幕适配的缩放方法(对于自定义的视图,可使用该方法进行缩放处理)
+ (CGFloat)DialogScaledSize:(CGFloat)size;

/// 弹窗屏幕适配的缩放比例因子
+ (CGFloat)DialogScaleFlag;

@end