IOS之导航控制器传值
UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped。这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显示而已。大家先看一下两者的应用

1、首先我们介绍一下平铺的tableView,初始化一个tableView如下
#pragma mark - 设置子视图
- (void)setSubviews{ UITableView * table=[[UITableView alloc] initWithFrame:CGRectMake(, , self.view.frame.size.width, self.view.frame.size.height-) style:UITableViewStylePlain];
self.tableView=table; //设置数据源代理
table.dataSource=self;
//设置方法属性代理
table.delegate=self; [self.view addSubview:table]; }
tableView需要设置两个代理,而要作为tableView的代理必须实现其代理方法,并遵守协议
/**
tableView 代理功能:
1 需要告知展示数据的条数
2 需要告知展示的内容 要想作为tableView的代理 需要遵守UITableViewDataSource 和 UITableViewDelegate两个协议
*/ @interface ViewController ()<UITableViewDataSource,UITableViewDelegate> /** 数据数组*/
@property(nonatomic,strong) NSArray * dataArray; /** tableView接口*/
@property(nonatomic,weak) UITableView * tableView; @end
2、我们通过当前的系统字体作为显示的内容,加载数据如下
#pragma mark - 加载数据
- (void)loadData{
self.dataArray=[UIFont familyNames]; }
3、实现代理方法
#pragma mark - UITableViewDatasSource //返回记录条数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.dataArray.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ // 重复利用标识
NSString * identy=@"JRCell"; //从缓冲池获取可以利用的cell
UITableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:identy]; //如果缓冲池没有可利用对象需要重新创建
if (cell==nil) {
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identy]; cell.selectionStyle=UITableViewCellSelectionStyleNone; } cell.textLabel.text=self.dataArray[indexPath.row]; cell.textLabel.font=[UIFont fontWithName:self.dataArray[indexPath.row] size:]; return cell;
}
4、效果图如下

5、最简单的tableView 我们就做完了,但是在日常开发中,我们需要用到的功能不仅仅这么简单,有的时候cell是需要自定义的,下面我们完成一个美团列表展示自己定义的tableView

6、这里要求我们自定义美团列表cell,对于数据的加载和读取这里不做介绍,我们把重点放在如何自定义cell上面
① 我们先自定义一个cell,并且继承了UITableViewCell

② 然后我们向当前cell中拼接子视图
#pragma mark - 增加子视图
- (void) setSubview{ // 1 增加图标
UIImageView * jrImageView=[[UIImageView alloc] initWithFrame:CGRectMake(, , kRowHeight-, kRowHeight-)];
self.jrImageView=jrImageView;
jrImageView.backgroundColor=[UIColor redColor];
[self.contentView addSubview:jrImageView]; // 2 增加标题
UILabel * titleLable=[[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(jrImageView.frame)+, , kWidth-CGRectGetMaxX(jrImageView.frame)-, )];
titleLable.text=@"汉金城烤肉自助餐厅";
titleLable.font=[UIFont boldSystemFontOfSize:];
self.jrTitleLable=titleLable;
[self.contentView addSubview:titleLable]; // 3 增加子标题
UILabel * detailLable=[[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(jrImageView.frame)+, CGRectGetMaxY(titleLable.frame), kWidth-CGRectGetMaxX(jrImageView.frame)-, )];
detailLable.text=@"汉金城烤肉自助餐厅汉金城烤肉自助餐厅汉金";
detailLable.numberOfLines=;
detailLable.font=[UIFont boldSystemFontOfSize:];
detailLable.textColor=[UIColor grayColor];
self.jrDetailLable=detailLable;
[self.contentView addSubview:detailLable]; // 4 增加价格
UILabel * priceLable=[[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(jrImageView.frame)+, CGRectGetMaxY(detailLable.frame), , )];
priceLable.text=@"$2.9";
priceLable.font=[UIFont boldSystemFontOfSize:];
priceLable.textColor=[UIColor colorWithRed:/255.0 green:/255.0 blue:/255.0 alpha:];
self.jrPriceLale=priceLable;
[self.contentView addSubview:priceLable]; // 5 已售数量
UILabel * sellLable=[[UILabel alloc] initWithFrame:CGRectMake(kWidth-, CGRectGetMaxY(detailLable.frame), , )];
sellLable.text=@"已售1150";
sellLable.font=[UIFont boldSystemFontOfSize:];
sellLable.textColor=[UIColor grayColor];
self.jrSellLable=sellLable; [self.contentView addSubview:sellLable]; }
③ 我们需要对子视图开辟接口出来让外界访问

④ 定义方法初始化数据
#pragma mark - 初始化数据
- (void) initDataWithInfo:(Information *) info{ //设置图标
self.jrImageView.image=[UIImage imageNamed:info.strPic]; //设置标题
self.jrTitleLable.text=info.title; //设置明细
self.jrDetailLable.text=info.detailTitle; //设置价格
self.jrPriceLale.text=[NSString stringWithFormat:@"$%.1f",info.price]; //设置销量
self.jrSellLable.text=[NSString stringWithFormat:@"销量%ld",info.soldNum]; }
⑤ 我们在代理方法里面,初始化我们自定义cell并且设置数据即可
#pragma mark 返回cell
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSString * identy=@"jrCell"; JRTableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:identy]; if (cell==nil) { cell=[[JRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identy]; //设置选中样式为空
cell.selectionStyle=UITableViewCellSelectionStyleNone; } //重新设置数据
Information *info= self.dataArray[indexPath.row];
[cell initDataWithInfo:info]; return cell; }
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

IOS之导航控制器传值的更多相关文章
- iOS:导航控制器侧滑出栈实现
介绍:在iOS中,导航控制器UINavigationController是默认实现左侧边缘侧滑手势出栈的,但是如果当开发者对导航控制器子控制实现自定义leftBaButtonItem时,这个侧滑功能就 ...
- IOS UINavigationController 导航控制器
/** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootVie ...
- IOS中导航控制器的代理及隐藏控制器刚出现时的滚动条
一.导航控制器的代理 1.UINavigationController的delegate属性 2.代理方法 1> 即将显示新控制器时调用 /* navigationController : 导航 ...
- IOS之导航控制器
UINavigationController是用于构建分层应用程序的主要工具,主要采用栈形式来实现视图.任何类型的视图控制器都可放入栈中.在设计导航控制器时需要指定根视图即用户看到的第一个视图.根视图 ...
- iOS结合导航控制器和标签栏控制器
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name=& ...
- iOS 隔离导航控制器
题外话:最近这两个月一直很闲,项目上基本没有啥大的需求.对于程序员来说,如果没有需求其实是一件很难受的事情,之前好多次在项目中没事找事,该优化的优化,该整理的整理.可能好多程序员都遇到过与我类似的情况 ...
- iOS开发 — (UINaVigationController)导航控制器,界面传值
UINavigationController 继承于 UIViewController , 以栈的方式管理所 控制的视图控制器 . 至少要有一个被管理的视图控制器 ,这个控制器我们称作导航控制器的根视 ...
- 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...
- IOS初级:导航控制器
1.AppDelegate.m老生常谈了,创建window,创建根视图rootViewController - (BOOL)application:(UIApplication *)applicati ...
随机推荐
- .NET Core改造工程直播
[背景] 新项目需要跨平台,原来积累的.NET类库需要改造为.NET Core. [直播] 新增加的项目不支持排除文件 不支持定义条件编译常量,虽然在项目中能使用#if语法,但无地方定义DefineC ...
- 使用multiprocessing中的常见问题
在python的解释器中,CPython是应用范围最广的一种,其具有丰富的扩展包,方便了开发者的使用.当然CPython也不是完美的,由于全局解释锁(GIL)的存在,python的多线程可以近似看作单 ...
- Winform 串口通讯之地磅
继上次的读卡之后,要做一个地磅的读取. 下面是我在读卡Demo上改的读取地磅的. 地磅是一直向串口发送数据的,所以需要截取数据来一直判断数据是否合法,然后计算出结果. 其中遇到了一个小问题,文末有介绍 ...
- 【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 599 Solved: 354 Description Input ...
- BZOJ.2716.[Violet3]天使玩偶(K-D Tree)
题目链接 KD-Tree.因为插入过多点后可能会退化成链,所以左/右子树sz > α*整棵子树sz时对整棵子树进行重构. 树的节点数必须是3n?why?洛谷,BZOJ都这样..(数据范围错了吧 ...
- 保存全局Crash报告&发送邮件
上篇写到,将程序中没有处理到的crash信息保存到本地文件夹下.但是实际的情况是,你不可能总是将用户的设备拿过来.所以一般性的处理是,将crash reports发送到服务器或者邮箱.所以针对上篇的代 ...
- 【洛谷】1477:[NOI2008]假面舞会【图论】
P1477 [NOI2008]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...
- 【BZOJ-3527】力 FFT
3527: [Zjoi2014]力 Time Limit: 30 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 1544 Solved: 89 ...
- 彻底解决每次打开visio都提示windows正在配置visio的问题
出现这个提示windows正在配置XXX软件的问题,是由于在安装一个新的版本时,之前那个版本的office没有完全卸载,注册表内有残留. 最简单的方式,并不是 把HKEY_CURRENT_USER\S ...
- 如何使用git工具向github提交代码
大致分为以下几个步骤 安装git环境,工具使用msysgit github上的账号 首先在github上点击头像旁边的加号 add new ,选择new Repository,自己创建一个名字,假设取 ...