iOS开发——UI篇OC篇&UITableView简单封装

UITableView简单封装

UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也提到了,在后面的文章中将会详细解释。

当然这篇文档并不是介绍证明去使用它,只是说说怎么去封装活着更好的使用。

这里主要是关于UItableView中Cell中的多功能实现

一:新建一个模型数据,用于Cell的实现

 /**
  *  覆盖系统的枚举
  */
 typedef enum {
     CellItemTypeNone,                   // don't show any accessory view
     CellItemTypeDisclosureIndicator,    // regular chevron. doesn't track
     CellItemTypeDetailDisclosureButton, // info button w/ chevron. tracks
     CellItemTypeCheckmark,              // checkmark. doesn't track
     CellItemTypeDetailButton NS_ENUM_AVAILABLE_IOS(7_0), // info button. tracks

     CellItemTypeSwitch//扩充
     /**
      *  当以后我们使用tableView的时候,如果每个Cell或者Cell的右边有系统Cell存在的控件或者View的时候,我们只要先在这里定义对应的控件或者View
      */

 }CellItemType;

 @interface iCocosModel : NSObject

 //文字标题
 @property (nonatomic, copy) NSString *title;

 //子标题
 @property (nonatomic, copy) NSString *subtitle;

 //类名,点击对应的行显示对应类的控制器
 @property (nonatomic, copy) NSString *className;

 //类型:比如事剪头还是按钮还是Switch活着其他的
 @property (nonatomic, assign) CellItemType cellItemType;

 /**
  *  初始化方法
  */
 +(id)itemWithTitle:(NSString *)title cellItemType:(CellItemType)cellItemType;

模型数据方法的实现

 /**
  *  初始化方法
  */

 +(id)itemWithTitle:(NSString *)title cellItemType:(CellItemType)cellItemType
 {
     iCocosModel *item = [[iCocosModel alloc] init];
     /**
      *  转为对应的模型
      */

     item.title = title;

     item.cellItemType = cellItemType;

     //返回每一个项
     return item;

 }

完成了这一步,我们使用起来就非常简单了。

 #import "iCocosViewController.h"
 /**
  *  对应的模型类
  */
 #import "iCocosModel.h"

 @interface iCocosViewController ()
 {
     NSArray *_cellItems;
 }
 @end

 @implementation iCocosViewController

 //重写这个方法实现分组:改变默认是形式
 -(id)init
 {
     return  [self  initWithStyle:UITableViewStyleGrouped];
 }

 - (void)viewDidLoad
 {
     [super viewDidLoad];

     [self addCellItems];
 }

这里时最重要的部分:

 -(void)addCellItems
 {
     /**
      *  这里就是使用的实现方法,我要添加什么行就先创建行,然后放到_cellitems数组中
      */
     iCocosModel *note = [iCocosModel itemWithTitle:@"通知设置" cellItemType:CellItemTypeDisclosureIndicator];

     iCocosModel *update = [iCocosModel itemWithTitle:@"上传高清图片" cellItemType:CellItemTypeSwitch];
     iCocosModel *photo = [iCocosModel itemWithTitle:@"照片水印" cellItemType:CellItemTypeSwitch];

     _cellItems = @[
                    @[note],
                    @[update, photo]
                    ];

 }

代理方法的实现

 #pragma mark TableView代理方法

 //节数
 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
     //数组的个数,里面可能还有字典
     return _cellItems.count;
 }

 //行数
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     //数组中每个元素(字典)包含子元素的个数
     NSArray *array = _cellItems[section];
     return array.count;
 }
 //对应的数据
 #pragma mark 每当有一个cell进入视野范围内就会调用,返回当前这行显示的cell
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     static NSString *ID = @"Cell";
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
     if (cell == nil) {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
     }

     /**
      *  从模型中取得子元素
      */
     iCocosModel *item = _cellItems[indexPath.section][indexPath.row];

     cell.textLabel.text = item.title;

     if (item.cellItemType == CellItemTypeSwitch) {
         cell.accessoryView = [[UISwitch alloc] init];
     } else {
         cell.accessoryType = item.cellItemType;
     }

     return cell;
 }

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {

 }

如果你到了这一步说明你已经成功了,当然步骤是死的,人是活的,你也可以实现更加复杂活着实用的功能,在后面的文章我将会对他进行更加深入的封装,最后不管到了那里都可拿来用,这才是一个真正的开发者,不是吗!

 
上一篇:调整V7连保监平台时问题


下一篇:arm-linux内核编译过程小结