iOS开发——开发必备OC篇&UITableView设置界面完整封装(一)
UITableView设置界面完整封装(一)
简单MVC实现UITableView设置界面分组数据显示
一:模型
1:cell模型
/** 描述cell图片 */ @property (nonatomic, strong) UIImage *image; /** 描述cell文字 */ @property (nonatomic, strong) NSString *title;
// 根据行模型确定cell右边辅助视图
// 1.提供一个类型枚举,箭头,开头
// 2.用子类去判断cell的类型
+ (instancetype)itemWithImage:(UIImage *)image title:(NSString *)title;
实现文件
+ (instancetype)itemWithImage:(UIImage *)image title:(NSString *)title
{
iCocosSettingItem *item = [[self alloc] init];
item.image = image;
item.title = title;
return item;
}
2:分组模型
/** 描述当前组有多少行 */ @property (nonatomic, strong) NSArray *items; /** 头部标题 */ @property (nonatomic, strong) NSString *headerTitle; /** 尾部标题 */ @property (nonatomic, strong) NSString *footerTitle; + (instancetype)groupWithItems:(NSArray *)items;
实现文件
+ (instancetype)groupWithItems:(NSArray *)items
{
iCocosGroupItem *group = [[self alloc] init];
group.items = items;
return group;
}
二:视图
@interface iCocosSettingCell : UITableViewCell + (instancetype)cellWithTableView:(UITableView *)tableView; /** item行模型,描述cell的外观 */ @property (nonatomic, strong) iCocosSettingItem *item;
实现文件
+ (instancetype)cellWithTableView:(UITableView *)tableView
{
static NSString *ID = @"cell";
XMGSettingCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[iCocosSettingCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
return cell;
}
- (void)setItem:(iCocosSettingItem *)item
{
_item = item;
// 设置子控件数据
[self setUpData];
// 设置辅助视图
[self setUpAccessoryView];
}
#pragma mark - 设置辅助视图
- (void)setUpData
{
self.imageView.image = _item.image;
self.textLabel.text = _item.title;
}
#pragma mark - 设置辅助视图
- (void)setUpAccessoryView
{
// 设置辅助视图
if ([_item isKindOfClass:[iCocosSettingArrowItem class]]) {
// 展示箭头
UIImageView *arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right"]];
self.accessoryView = arrowView;
}else if ([_item isKindOfClass:[iCocosSettingSwitchItem class]]){
// 展示开关
UISwitch *switchView = [[UISwitch alloc] init];
self.accessoryView = switchView;
}else{
self.accessoryView = nil;
}
}
三:控制器
@interface iCocosSettingViewController ()
// 总共的组数
@property (nonatomic, strong) NSMutableArray *groups;
@end
@implementation iCocosSettingViewController
- (NSMutableArray *)groups
{
if (_groups == nil) {
_groups = [NSMutableArray array];
}
return _groups;
}
- (instancetype)init
{
return [self initWithStyle:UITableViewStyleGrouped];
}
- (void)viewDidLoad {
[super viewDidLoad];
// 添加第0组
[self setUpGroup0];
// 添加第1组
[self setUpGroup1];
// 添加第2组
[self setUpGroup2];
}
// 添加第0组
- (void)setUpGroup0
{
// 创建行模型
// 使用兑换码
iCocosSettingItem *RedeemCode = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// Items:存储当前数组有多少行模型
// 创建一个组模型,描述第0组
iCocosGroupItem *group = [iCocosGroupItem groupWithItems:@[RedeemCode]];
// 设置头部标题
group.headerTitle = @"abc";
// 添加组模型到groups数组,有多少个组模型就有多少组
[self.groups addObject:group];
}
// 添加第1组
- (void)setUpGroup1
{
// 使用兑换码
iCocosSettingItem *RedeemCode = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 使用兑换码
iCocosSettingItem *RedeemCode1 = [iCocosSettingSwitchItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 使用兑换码
iCocosSettingItem *RedeemCode2 = [iCocosSettingSwitchItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 使用兑换码
iCocosSettingItem *RedeemCode3 = [iCocosSettingSwitchItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 描述第一组有多少个行模型,描述第1组
NSArray *items = @[RedeemCode,RedeemCode1,RedeemCode2,RedeemCode3];
// 创建组模型
iCocosGroupItem *group = [iCocosGroupItem groupWithItems:items];
group.headerTitle = @"asd";
group.footerTitle = @"asdasdq";
// 添加到group总数组
[self.groups addObject:group];
}
// 添加第2组
- (void)setUpGroup2
{
// 使用兑换码
iCocosSettingItem *RedeemCode = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 使用兑换码
iCocosSettingItem *RedeemCode1 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 使用兑换码
iCocosSettingItem *RedeemCode2 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 使用兑换码
iCocosSettingItem *RedeemCode3 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"];
// 描述第一组有多少个行模型,描述第1组
NSArray *items = @[RedeemCode,RedeemCode1,RedeemCode2,RedeemCode3];
// 创建组模型
iCocosGroupItem *group = [iCocosGroupItem groupWithItems:items];
group.footerTitle = @"bcd";
// 添加到group总数组
[self.groups addObject:group];
}
#pragma mark - 数据源
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.groups.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// 取出当前的组模型
iCocosGroupItem * group = self.groups[section];
return group.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1.创建cell
iCocosSettingCell *cell = [iCocosSettingCell cellWithTableView:tableView];
// 取模型
// 哪一组的模型
iCocosGroupItem *group = self.groups[indexPath.section];
// 从模型数组数组中取出对应的模型
iCocosSettingItem *item = group.items[indexPath.row];
// 2.给cell传递模型,给cell的子控件赋值
cell.item = item;
return cell;
}
// 返回第section组的头部标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
// 取出当前是哪一组
iCocosGroupItem *group = self.groups[section];
return group.headerTitle;
}
// 返回第section组的尾部标题
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
// 取出当前是哪一组
iCocosGroupItem *group = self.groups[section];
return group.footerTitle;
}
@end
最终的现实界面

iOS开发——开发必备OC篇&UITableView设置界面完整封装(一)的更多相关文章
- iOS开发——开发必备OC篇&UITableView设置界面完整封装(三)
UITableView设置界面完整封装(三) 简单MVC实现UITableView设置界面之界面跳转 创建一个需要调整的对应的控制器 在需要调整的类型模型中创建对应的属性用来实现调整类型控制器的设置 ...
- iOS开发——开发必备OC篇&UITableView设置界面完整封装(二)
UITableView设置界面完整封装(二) 简单MVC实现UITableView设置界面之Cell右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...
- iOS开发——开发必备OC篇&UITableView设置界面完整封装(四)
设置界面完整封装(四) 简单MVC实现UITableView设置界面完善封装及拓展使用 关于使用和拓展, 其实基本上就是同UItableView,知识讲数据改一下就可以 拓展使用 1:首先定义一个数组 ...
- ios开发——实用技术篇OC篇&iOS的主要框架
iOS的主要框架 阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...
- iOS应用 跳转到系统的设置界面
现在很多APP都需要获取用户权限,例如,允许调用位置信息,读取短信,拨打电话,开启WIFI,掉头摄像头等,用户不允许APP获取这些权限的时候.最好的用户体验是,直接跳转到系统设置界面,让用户自己设置. ...
- iOS开发——UI篇OC篇&UITableView简单封装
UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...
- iOS开发——开发必备OC篇&彩票实战之精华讲解
彩票实战之精华讲解 在这段时间自己研究并学习关于彩票项目开发的时候遇到各种坑,各种技术点以前或许之前用过但是却用起来不是那么熟悉,所以没遇到一个重点的地方我就会记录一下,希望不会再有下次. 本文主要讲 ...
- iOS开发——UI篇OC篇&UITableView多项选择
UITableView多项选择 自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableV ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...
随机推荐
- 【LeetCode】14 - Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings. Solution: cla ...
- nginx指令
Directives(指令) Syntax(语法): aio on | off | threads[=pool]; Default: aio off; Context: http, server, l ...
- ipv4头部分析,读书笔记3
ip头部最长是60字节,前面的20字节是固定的,选项可加上40字节 4位版本号--- 对于ipv4来说呢,就是4 4位头部长度 --- 表示 有多小个32bit(4字节),4位最大表示数是15啦,也 ...
- @Html.Raw()
asp.net mvc中把html字符串以html效果输出来, @string变更输出的是HTML代码, 如果想以HTML标签效果输出来可以用函数@Html.Raw(str) 输出来的就是网效果了, ...
- 一款APP从设计稿到切图过程全方位揭秘 Mark
纯干货!一款APP从设计稿到切图过程全方位揭秘 @BAT_LCK:我本身是一名GUI设计师,所以我只站在GUI设计师的角度去把APP从项目启动到切片输出的过程写一写,相当于工作流程的介绍吧.公司不 ...
- First & First
First有记录则返回,否则返回null FirstOrDefault有记录则返回,否则NEW一个新的实体对象返回
- SQL2008 SQL Server 代理服务提供的凭据无效
工作中遇到的问题记录: 安装到服务器配置时出的错误:为 SQL Server 代理服务提供的凭据无效.若要继续操作,请为 SQL Server 代理服务提供有效的帐户和密码. 解决方法:直接在所有的“ ...
- 异步编程之Promise(2):探究原理
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3146 Accepted: 1798 Descr ...
- UVA 624 (0 1背包 + 打印路径)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #i ...