标签:
基本上,每一款APP都有相应的设置模块。怎么设置才能更灵活和通用呢,这也是大家一直思考的。下面说说在网易彩票中,设置模块的设置思想。
基本上有三种方案:
最终我们使用的是第4种方式来实现,效果:
思路:
1.创建cell的数据模型group(头部标题、尾部标题及items)
2.创建cell的数据模型item(图标、标题、block、跳转到控制器)
3.自定义cell,根据不同的item模型创建不同的cell外观(箭头、开头、文本等)
4.自定一个基类控制器,实现
5.设置界面实现基类控制器,只需要简单配置要显示的item
1.创建cell的数据模型group
MJSettingGroup.h
#import <Foundation/Foundation.h> @interface MJSettingGroup : NSObject /** 头部标题*/ @property (nonatomic, copy) NSString *header; /** 尾部标题*/ @property (nonatomic, copy) NSString *footer; /** 存放这组行的所有的模型*/ @property (nonatomic, copy) NSArray *items; @end
2.创建cell的数据模型item
单元Cell中有好几种类型:
因此,为了在界面上更容易区别,我们分别为这几个类型定义一个模型。当前,这几种类型的中,左边显示图标和不显示图标都是一样的,因此,定义一个单元Cell模型基类,其它都继续于这个基类。
(基类)MJSettingItem.h
#import <Foundation/Foundation.h> typedef void (^MJSettingItemOption)(); @interface MJSettingItem : NSObject /** 图标 */ @property (nonatomic, copy) NSString *icon; /** 标题 */ @property (nonatomic, copy) NSString *title; /** 点击cell要做的事情 */ @property (nonatomic, copy) MJSettingItemOption option; +(instancetype)itemWithIcon:(NSString *)icon title:(NSString *)title; +(instancetype)itemWithTitle:(NSString *)title; @end
(基类)MJSettingItem.m
#import "MJSettingItem.h" @implementation MJSettingItem +(instancetype)itemWithTitle:(NSString *)title { return [self itemWithIcon:nil title:title]; } +(instancetype)itemWithIcon:(NSString *)icon title:(NSString *)title { MJSettingItem *item = [[self alloc] init]; item.icon = icon; item.title = title; return item; } @end
MJSettingLabelItem(文本)、MJSettingSwitchItem(开关)、MJSettingArrowItem(箭头)都分别继承MJMJSettingItem
MJSettingArrowItem.h
#import "MJSettingItem.h" @interface MJSettingArrowItem : MJSettingItem /** * 点击这行cell需要跳转的控制器 */ @property (nonatomic, assign) Class destVcClass; + (instancetype)itemWithIcon:(NSString *)icon title:(NSString *)title destVcClass:(Class)destVcClass; + (instancetype)itemWithTitle:(NSString *)title destVcClass:(Class)destVcClass; @end
MJSettingArrowItem.m
#import "MJSettingArrowItem.h" @implementation MJSettingArrowItem + (instancetype)itemWithIcon:(NSString *)icon title:(NSString *)title destVcClass:(Class)destVcClass { MJSettingArrowItem *item = [self itemWithIcon:icon title:title]; item.destVcClass = destVcClass; return item; } + (instancetype)itemWithTitle:(NSString *)title destVcClass:(Class)destVcClass { return [self itemWithIcon:nil title:title destVcClass:destVcClass]; } @end
3.自定义cell
根据不同的item模型创建不同的cell外观(箭头、开头、文本等)
4.自定一个基类控制器,实现
MJBaseSettingViewController.h
#import <UIKit/UIKit.h> @interface MJBaseSettingViewController : UITableViewController @property (nonatomic, strong) NSMutableArray *data; @end
标签:
原文地址:http://www.cnblogs.com/jys509/p/4786429.html