码迷,mamicode.com
首页 > 移动开发 > 详细

iOS UI进阶-1.3网易彩票设置模块

时间:2015-09-06 17:50:03      阅读:500      评论:0      收藏:0      [点我收藏+]

标签:

概述

基本上,每一款APP都有相应的设置模块。怎么设置才能更灵活和通用呢,这也是大家一直思考的。下面说说在网易彩票中,设置模块的设置思想。

基本上有三种方案:

  1. static cell(呆板,完全没有动态)
  2. 使用代码,条件判断逐个编写(麻烦,代码冗长)
  3. 使用plist加载(能够动态配置跳转控制器,不能配置请求代码;由于使用字符串配置跳转控制器名,容易出现运行时错误)
  4. 使用模型封装每个cell的数据(item),使用Class作为跳转控制器属性(这样就能经过编译检测)

最终我们使用的是第4种方式来实现,效果:

技术分享

实现

思路:

1.创建cell的数据模型group(头部标题、尾部标题及items)

2.创建cell的数据模型item(图标、标题、block、跳转到控制器)

3.自定义cell,根据不同的item模型创建不同的cell外观(箭头、开头、文本等)

4.自定一个基类控制器,实现

  • 加载解析group和item数据
  • 根据group数据创建table的样式(组底部、组尾部)
  • 加载自定义的cell
  • 如果item类是跳转类型的,需要配置跳转目标控制器
  • 如果item类是代码执行型的,需要配置要执行的block代码

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.自定一个基类控制器,实现

  • 加载解析group和item数据
  • 根据group数据创建table的样式(组底部、组尾部)
  • 根据不同的item模型创建不同的cell外观(箭头、开头、文本等)
  • 如果item类是跳转类型的,需要配置跳转目标控制器
  • 如果item类是代码执行型的,需要配置要执行的block代码

MJBaseSettingViewController.h

#import <UIKit/UIKit.h>

@interface MJBaseSettingViewController : UITableViewController
@property (nonatomic, strong) NSMutableArray *data;
@end

 

 

 

iOS UI进阶-1.3网易彩票设置模块

标签:

原文地址:http://www.cnblogs.com/jys509/p/4786429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!