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 ...
随机推荐
- Bzoj4548 小奇的糖果(链表+树状数组)
题面 Bzoj 题解 很显然,我们只需要考虑单独取线段上方的情况,对于下方的把坐标取反再做一遍即可(因为我们只关心最终的答案) 建立树状数组维护一个横坐标区间内有多少个点,维护双向链表实现查询一个点左 ...
- java UTF8 HEX
private final static char[] hexArray = "0123456789ABCDEF".toCharArray(); public static Str ...
- Error after SQL Server 2012 installation: Login Failure for "SQL Server Integration Services 11.0" SSIS service
When you install SQL Server 2012 and you try to connect to SSIS services, you cannot due to that the ...
- iOS 11开发教程(一)
iOS 11开发概述 iOS 11是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统的测试版于2017年6月6号(北京时间)被发布.本章将主要讲解iOS 11的新特性.以及使用Xco ...
- JavaSE基础之JDBC
JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sq ...
- codevs 5790 素数序数
5790 素数序数(筛素数版) 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定一个整数n,保证n为正整数且在int范 ...
- ZeptoLab Code Rush 2015 A. King of Thieves 暴力
A. King of Thieves Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/526/pr ...
- Mac安装homebrew安装到指定目录
第一种直接安装在/usr/local目录下 mac 打开终端输入 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebr ...
- ISO 7816-4: Interindustry Commands for Interchange
5. Basic Organizations 5.1 Data structures5.2 Security architecture of the card 5.3 APDU message str ...
- MP1593 RT8272 ACT4070 制作的DC-DC稳压电源
http://www.ideyi.org/article/11-05/2575971305526398.html?sort=2068_2073_2092_0 MP1593制作的DC-DC稳压电源,这款 ...