效果展示:
Gif
功能描述:
- 页面为不同的ViewController,可以左右滑动.
- 顶部导航条可点击切换(双击刷新事件回调),可以左右滑动查看.
- 按需显示的编辑菜单,可以长按拖动顺序/添加/删除
使用:
- 工程中的ERPageController文件拖入工程
#import "ERSegmentController.h"
- 初始化控件
ERSegmentController *pageManager = [[ERSegmentController alloc] init];
pageManager.view.frame = CGRectMake(0, 64, ScreenWidth, ScreenHeight - 64 - 49);
pageManager.segmentHeight = 25;//导航条高度
pageManager.progressWidth = 15;//导航条底横线度宽度
pageManager.progressHeight = 1;//导航条底横线高
pageManager.itemMinimumSpace = 10;//导航条item直接的间距
pageManager.normalTextFont = [UIFont systemFontOfSize:12];//未选中字体大小
pageManager.selectedTextFont = [UIFont systemFontOfSize:16];//已选中字体大小
pageManager.normalTextColor = [UIColor blackColor];//未选中字体颜色
pageManager.selectedTextColor = [UIColor redColor];//已选中字体颜色
pageManager.dataSource = self;//页面管理数据源
pageManager.menuDataSource = self;//菜单管理数据源, 如果不设置改代理则没有菜单按钮
pageManager.editMenuIconIgV.image = [UIImage imageNamed:@"editButtonImage"];//编辑菜单icon (按需设置)
pageManager.delegate = self;//相关事件返回代理
[self.view addSubview:pageManager.view];
[self addChildViewController:pageManager];
- 通过代理方法传入数据源
@protocol ERPageViewControllerDataSource <NSObject>
@required
/**
返回子控制器总数,类似TableViewDataSource
@param pageViewController self
@return 子控制器总数
*/
- (NSInteger)numberOfControllersInPageViewController:(ERPageViewController *)pageViewController;
/**
返回对应index的ViewController
@param pageViewController self
@param index 当前index
@return 需要展示的ViewController
*/
- (UIViewController *)pageViewController:(ERPageViewController *)pageViewController childControllerAtIndex:(NSInteger)index;
/**
子控制器title
@param pageViewController self
@param index 当前index
@return title
*/
- (NSString *)pageViewController:(ERPageViewController *)pageViewController titleForChildControllerAtIndex:(NSInteger)index;
@end
- 如果需要编辑菜单则需要签订代理
<ERSegmentMenuControllerDataSource>
并实现菜单数据源代理方法
@protocol ERSegmentMenuControllerDataSource <NSObject>
@required;
/**
已经选择的频道列表信息
@param segmentMenuController self
@return 必须为字典型数组(必须包含一个KEY为@"name"的字符串)
*/
- (NSMutableArray<NSDictionary *> *)selectedChannelLisInSegmentMenuController:
(ERSegmentMenuController *)segmentMenuController;
@optional;
/**
未选择的频道列表信息
@param segmentMenuController self
@return 可以为nil ,若不为nil则必须为字典型数组(必须包含一个KEY为
@"name"的字符串)
*/
- (NSMutableArray<NSDictionary *> *)unSelectChannelListInSegmentMenuController:
(ERSegmentMenuController *)segmentMenuController;
/**
每组标题
@param segmentMenuController segmentMenuController
@param sectionHeaderLabel 组头Label
@param section section
@return title
*/
- (NSString *)segmentMenuController:(ERSegmentMenuController *)segmentMenuController sectionHeaderLabel:(UILabel
*)sectionHeaderLabel titleForHeaderInSection:(NSInteger)section;
@end
- 页面切换的监听,菜单按钮的点击可通过
<ERSegmentControllerDelegte>
获取
@protocol ERSegmentControllerDelegte <NSObject>
@optional
/**
导航按钮点击事件回调
@param segmentController self
@param indexPath indexPath
*/
- (void)segmentController:(ERSegmentController *)segmentController
didSelectItemAtIndexPath:(NSIndexPath *)indexPath;
/**
导航菜单编辑按钮点击回调
@param segmentController self
@param editMenuButton editMenuButton
*/
- (void)segmentController:(ERSegmentController *)segmentController didSelectEditMenuButton:(UIButton *)editMenuButton;
/**
导航按钮双击事件回调
@param segmentController self
@param indexPath indexPath
*/
- (void)segmentController:(ERSegmentController *)segmentController itemDoubleClickAtIndexPath:(NSIndexPath *)indexPath;
/**
页面切换滚动完成回调
@param pageController superClass
@param fromIndex fromIndex
@param toIndex toIndex
*/
- (void)pageControllerDidScroll:(ERPageViewController *)pageController fromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex;
@end
注意事项: 数据模型我使用的是(NSMutableArray <NSDictionary *> *)
通过 key=@"name" 获取页面标题 (可根据自己需求更改)
Demo地址:
GitHub - ERPageController 喜欢请给个Star ~ 感谢~
参考类库 (已表感谢 ! 学习并膜拜大神们 ~)
DDNews
ZYColumnViewController
LXReorderableCollectionViewFlowLayout
TYPagerController