UIViewController+BBAToolBar.h 7.5 KB
//
//  UIViewController+BBAToolBar.h
//  BBAPods
//
//  Created by liuboyang01 on 16/8/17.
//  Copyright © 2016年 Baidu. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "BBAToolBar.h"
#import "BBAPannelManager.h"
#import "BBAPannelAction.h"
#import "BBAPannelCommon.h"
#import "UIViewController+BBAPannel.h"

/*
 使用方法:
 1,使用需要引用"UIViewController+BBAToolBar.h"
 2,调用showToolBarWithItems显示toolBar,items可以为空
 3,toolBar的定制参考UIToolBar控件,通过BBAToolBarItem定制每个按钮
 4,BBAToolBarItem支持手百自带BBAToolBarSystemItemID的样式,也可以通过userCustomView自定义,
    每个BBAToolBarItem都有一个itemID,如果是自定义的注意不要和BBAToolBarSystemItemID相同,id值最好小于BBAToolBarSystemItemIDBack
 5,toolBar支持飘新,通过BBAToolBarItem的badgeValue设置,更新badgeValue的值需要调用toolBar的relayoutToolBar重新绘制
 6,BBAToolBarItem之间的间距通过BBAToolBarSystemItemIDFlexibleSpace或者BBAToolBarSystemItemIDFixedSpace调节
 7,自定义组件,横屏toolbar各个组件重新排列处理方式为通过设置userCustomView的autoresizingMask属性实现,参见autoresizingMask的文档
 */

@interface UIViewController (BBAToolBar)
// 如果没有调用showToolBar则返回nil
@property (nonatomic, strong, readonly, nullable) BBAToolBar *bba_toolBar;
// 移除toolBar
- (void)bba_removeToolBar;
// 在当前viewcontroller视图层级最前面显示BBAToolBar,items为空则显示一个空的toolbar。hidden为YES,则创建一个隐藏在屏幕底部的BBAToolBar。
- (BBAToolBar * _Nullable)bba_showToolBarWithItems:(NSArray< BBAToolBarItem *  > *_Nullable)items shouldBehidden:(BOOL)hidden;
@end


@interface UIViewController (BBANavigationToolbar)
typedef void(^BBAGoHomeBlock)(NSDictionary * _Nullable extraInfo);
typedef void(^BBAGoBackBlock)(void);
//返回到Home时通知栈底元素(仅栈底元素会被通知)
@property (nonatomic, strong, nullable) BBAGoHomeBlock bbaGoHomeBlock;
//返回事件,默认为nil,若设置,则VC需自行管理pop操作
@property (nonatomic, strong, nullable) BBAGoBackBlock bbaGoBackBlock;
//是否隐藏ToolBarMenu
@property (nonatomic, assign) BOOL bbaHiddenToolBarMenu;
//item元素
@property (nonatomic, strong, readonly, nullable) NSArray<BBAToolBarItem *>* bbaToolbarItems;

//入栈后才会产生Toolbar实例
@property (nonatomic, strong, readonly, nullable) BBAToolBar *bbaNavigationToolBar;
//在没有设置ToolbarItems前提下设置为YES,栈底元素底bar显示“菜单”项;非栈底元素显示"返回"、"主页"、“菜单”三项。默认为NO
@property (nonatomic, assign) BOOL bbaShowNavigationToolBar;
//如果vc需要支持退出全屏(显示底bar)功能,则设置为YES,初始化一个隐藏的底bar。默认为NO
@property (nonatomic, assign) BOOL bbaFullScreenByNaviToolBarEnabled;
//顶部导航栏左侧按钮是否可用,默认不可用(隐藏).
@property (nonatomic, assign) BOOL bbaEnableNavigationBarLeftItem;

/**
 * @brief 设置底部导航栏元素.
 *
 * @param  toolbarItems 所有菜单项
 *
 */
- (void)setBBAToolbarItems:(nullable NSArray<BBAToolBarItem *> *)toolbarItems animated:(BOOL)animated;


/**
 * @brief 设置底部导航栏事件.
 *
 *
 * @return 返回v成功结果
 */
- (BOOL)bbaToolBarSetTarget:(nullable id)target
                     action:(nullable SEL)action
                 withItemID:(BBAToolBarSystemItemID)itemID;


/**
 * @brief 获取导航工具栏默认高度
 *
 * @return 返回导航工具栏默认高度
 */
+ (CGFloat)bbaNavigationToolbarDefaultHeight;


/**
 * @brief 设置底部导航栏菜单选项.
 *
 * @param  menuItems 所有菜单项
 *
 */

- (void)setBBAMenuItems:(nullable NSArray<BBAPannelAction *> *)menuItems __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));

- (nullable NSArray<BBAPannelAction *> *)bbaMenuItems __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));


/**
* @brief 设置底部导航栏菜单选项.
*
*/
- (nullable NSArray<NSArray<BBAPannelAction *> *> *)bbaMenuRowsItems __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));

- (void)setBBAMenuRowsItems:(nullable NSArray<NSArray<BBAPannelAction *> *> *)bbaMenuRowsItems __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));


/**
 * @brief 设置底部导航栏菜单header dataSource.
 *
 *
 */
- (void)setBBAMenuHeaderDataSource:(nullable id<BBAGridPannelHeaderDataSource>)dataSource __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));
- (nullable id<BBAGridPannelHeaderDataSource>)bbaMenuHeaderDataSource __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));

/**
 * @brief 设置底部导航栏菜单样式
 *
 *
 */
- (void)setBBAMenuConfigData:(NSDictionary * _Nonnull )configData __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));
- (nullable NSDictionary *)bbaMenuConfigData __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));


/**
 * @brief 返回主页, 导航默认方法(其他自定义导航工具条返回首页事件最终必须调用此方法)
 *
 */
- (void)bbaGoHome;

/**
 * @brief 返回主页, 导航默认方法(其他自定义导航工具条返回首页事件最终必须调用此方法)
 *
 */
- (void)bbaGoHomeWithExtraInfo:(NSDictionary * _Nullable)extraInfo;

/**
 * @brief 返回主页, 不带有动画
 *
 */
- (void)bbaGoHomeWithoutAnimation;

/**
 * @brief  返回上一层,导航默认方法(其他自定义导航工具条返回上一级页面事件最终必须调用此方法)
 *
 */
- (void)bbaGoBack;

///  回到首页
///  @note 方法内部会判断当前是否是在首页Tab下的子VC,如果是的话,则使用系统导航默认方法回到根VC首页,
///  如果不是在首页Tab,则判断当前VC是否是此Tab的根VC,如果是的话,则切换底Tab即可
///  如果不是此Tab的根VC,则使用递归判断此VC是否是present的VC还是Push的VC,然后进行回退到根VC
///  @param animated 是否包含动画
- (void)bbaBackToHomePageAnimated:(BOOL)animated;

/// 回到首页, 内部逻辑同 bbaBackToHomePageAnimated:
/// @param animated 是否包含动画
/// @param extraInfo 业务信息
- (void)bbaBackToHomePageAnimated:(BOOL)animated
                        extraInfo:(NSDictionary * _Nullable)extraInfo;


/**
 * @brief  点击菜单项,导航默认方法(其他自定义导航工具条Menu菜单事件最终必须调用此方法)
 *
 */
- (void)bbaMenuAction __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));

- (void)dissmissMoreMenu:(BOOL)animated __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));
- (void)dismissFontPannel:(BOOL)animated __attribute__ ((deprecated("该方法已被废弃,请勿再使用,请使用 UIViewController+BBAMenu.h 中的方法")));

/**
 * @brief 如果出现或将要出现在非栈底,生成完整的naviToolbarItems
 *
 **/
- (nullable NSArray*)bbaBuildNavigaitonToolbars:(nullable NSArray<BBAToolBarItem *> *)toolbarItems;

@end