开发进阶14_UITableView单行显示

@interface ViewController () <UITableViewDataSource, UITableViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

}

#pragma mark - 一共一组

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 1;

}

#pragma mark - 这一组里面有多少行

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return 9;

}

#pragma mark - 返回第indexPath这行对应的内容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

/*

Default:不显示detailTextLabel

Value1:在右边显示detailTextLabel

Value2:不显示图片,显示detailTextLabel

Subtitle:在底部显示detailTextLabel

*/

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];

cell.textLabel.text = [NSString stringWithFormat:@"产品-%ld",indexPath.row];

//设置详情文字

cell.detailTextLabel.text = [NSString stringWithFormat:@"产品-%ld好啊!!!!",indexPath.row];

//设置图片

NSString *imageName = [NSString stringWithFormat:@"00%ld.png",indexPath.row + 1];

cell.imageView.image = [UIImage imageNamed:imageName];

//设置右边的小图标

//大于号图标

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

//没有图标

cell.accessoryType = UITableViewCellAccessoryNone;

//钩号图标

cell.accessoryType = UITableViewCellAccessoryCheckmark;

//圆圈中有个i的图标

cell.accessoryType = UITableViewCellAccessoryDetailButton;

//大于号图标和圆圈中有个i的图标组合

cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

//设置最右边显示什么控件

cell.accessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];

return cell;

}

#pragma mark - 代理方法

#pragma mark 返回indexPath这行cell的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

return 70;

}

@end

采用模型的方式重构,同时弹出对话框修改name属性

@interface Product : UIView

//名称

@property (nonatomic, copy) NSString *name;

//描述

@property (nonatomic, copy) NSString *desc;

//图标

@property (nonatomic, copy) NSString *icon;

+ (id)shopWithName:(NSString *)name icon:(NSString *)icon desc:(NSString *)desc;

@end

+ (id)shopWithName:(NSString *)name icon:(NSString *)icon desc:(NSString *)desc

{

Product *shop = [[Product alloc] init];

shop.name = name;

shop.desc = desc;

shop.icon = icon;

return shop;

}

#import "ViewController.h"

#import "Product.h"

@interface ViewController () <UITableViewDataSource, UITableViewDelegate,UIAlertViewDelegate>

{

NSMutableArray *_allShop;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

//创建数组

_allShop = [NSMutableArray array];

//创建数据

Product *shop1 = [Product shopWithName:@"图书/音像" icon:@"001.png" desc:@"小说、情感、卡拉OK"];

Product *shop2 = [Product shopWithName:@"母婴用品" icon:@"002.png" desc:@"奶粉!!!!"];

Product *shop3 = [Product shopWithName:@"玩具" icon:@"003.png" desc:@"汽车、飞机、轮船"];

[_allShop addObjectsFromArray:@[shop1,shop2,shop3]];

//添加其他假数据

for (int i = 0; i < 20; i++) {

NSString *name = [NSString stringWithFormat:@"随机产品- %d",i];

NSString *desc = [NSString stringWithFormat:@"%@--好好",name];

NSString *icon = [NSString stringWithFormat:@"00%d.png",(i % 9) + 1];

Product *shop = [Product shopWithName:name icon:icon desc:desc];

[_allShop addObject:shop];

}

}

#pragma mark - 一共一组

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 1;

}

#pragma mark - 这一组里面有多少行

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return _allShop.count;

}

#pragma mark - 返回第indexPath这行对应的内容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];

//获取这一行的产品

Product *shop = _allShop[indexPath.row];

cell.textLabel.text = shop.name;

//设置详情文字

cell.detailTextLabel.text = shop.desc;

//设置图片

cell.imageView.image = [UIImage imageNamed:shop.icon];

//设置最右边显示什么控件

cell.accessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];

return cell;

}

#pragma mark - 代理方法

#pragma mark 选中某一行的cell就会调用

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

{

//取出所点击这行的产品对象

Product *shop = _allShop[indexPath.row];

//1.创建弹框

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"产品展示" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];

//设置样式(一个明文文本框)

alert.alertViewStyle = UIAlertViewStylePlainTextInput;

//设置文本框默认位置

[alert textFieldAtIndex:0].text = shop.name;

//2.显示弹框

[alert show];

//3.绑定行号为alertview的tag

alert.tag = indexPath.row;

}

两个方法之间的关联是:先调用tableView:didSelectRowAtIndexPath:,在这个方法中,给UIAlertView的tag赋值为修改的行号,然后再alertView:clickedButtonAtIndex:方法中就可以直接使用了

#pragma mark - alertView的代理方法

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

if(buttonIndex == 0) return;

//1.取出文本框文字

NSString *text = [alertView textFieldAtIndex:0].text;

//2.将文字更新到对应的cell上面去

Product *shop = _allShop[alertView.tag];

shop.name = text;

//3.刷新表格

/*

重新向数据源索取数据

重新向数据源发送消息

重新调用数据源的方法,根据返回值决定显示什么数据

*/

//整体刷新

[_tableView reloadData];

//局部刷新

//刷新第inSection组的第indexPathForRow行

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:alertView.tag inSection:0];

NSArray *paths = @[indexPath];

//刷新哪一行,使用什么样的动画

[_tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationLeft];

}

@end

时间: 2024-10-17 15:13:34

开发进阶14_UITableView单行显示的相关文章

iOS开发进阶

博客专栏>移动开发专栏>IOS开发进阶 分享到:新浪微博腾讯微博IOS开发进阶 iPhone开发进阶,如果你已经基本熟悉了Objective-c基本语法,你已经熟悉iOS程序开发的基础,那么我们再进一步的学习iOS开发的知识.比如多任务编程,网络,系统方面的原理,内存管理,debug或查找crash的技巧等. 收藏 订阅 最新更新文章 [移动开发] iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势) 1.介绍有的博友看了上篇博文 iOS界面-仿网易新闻左侧抽屉式交互 ,在微

[转]抢先Mark!微信公众平台开发进阶篇资源集锦

FROM : http://www.csdn.net/article/2014-08-01/2820986 由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在北京举行.作为一线微信开发商云集.专注在开发实践方面的顶级技术活动,演讲话题极为丰富,涵盖了微信开发不同维度的多个层内容 (首批议程发布),包括:企业服务号开发和高级应用.企业号开发.如何与业务系统对接.各种高级接口功能.智能客服与LBS.HTML5社交应用.微信支付.微信电商开发等多方面(查看 参加微信开发

&lt;iOS开发进阶&gt; 干货汇总

之前看完了<iOS开发进阶>, 也做了相应的总结, 详见:读<iOS开发进阶>有感 今天花点时间, 把一些干货汇总下, 然后就可以和这本书say goodbye了. 包括: p85 10.1.3 p96 使用GCD后 p99 后台运行 p131 使用Safari进行调试 p184 收起键盘 p185 设置应用内的系统控制语言 p193 忽略编译警告 p198 给模拟器相册增加图片 10.1.3 不要向已经释放的对象发送消息 有些读者想测试当对象释放时, 其retainCount 是

《android开发进阶从小工到专家》读书笔记--HTTP网络请求

No1: 客户端与服务器的交互流程: 1)客户端执行网络请求,从URL中解析出服务器的主机名 2)将服务器的主机名转换成服务器的IP地址 3)将端口号从URL中解析出来 4)建立一条从客户端与Web服务器的TCP连接 5)客户端通过输出流向服务器发送一条HTTP请求 6)服务器向客户端回送一条HTTP响应报文 7)客户端从输入流获取报文 8)客户端解析报文,关闭连接 9)客户端将结果显示在UI上 No2: HTTP请求方式: 1)GET 获取服务器中某个资源,www.devtf.cn/artic

编程开发进阶更重要的是掌握的核心设计思维[图]

编程开发进阶更重要的是掌握的核心设计思维[图]:"单独写一个琐碎的代码块就等同于弹奏音阶一样,不幸的是,弹奏音阶并不能教会你任何关于音乐的东西,并且非常枯燥"这是 Eric S. Raymond 在他的文章<How to learn Hacking>中所描述的一段话.作为一个已经从入门走到进阶的编程者,我非常赞同他所说的这句话.然而,大部分老师,课本和大学课程都会通过琐碎的代码块练习来教授编程知识.即使这样的编程练习可以让你明白条件语句和循环的工作机制以及如何编写一个基本的

mysql 开发进阶篇系列 47 xtrabackup (完全备份恢复,恢复后重启失败总结)

一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全备份文件的目录,还原到datadir目录下. xtrabackup --copy-back --target-dir=/data/backups/ 可以使用xtrabackup --move-back选项恢复备份.这个选项类似于xtrabackup --copy-back,唯一的区别是它将文件移动到

Rails 5 开发进阶

Rails 5 开发进阶:https://www.gitbook.com/book/kelby/rails-beginner-s-guide/details cancan : http://blog.xdite.net/posts/2012/07/30/cancan-rule-engine-authorization-based-library-1/ Ruby官方文档翻译(Ruby官方文档中文版) : http://blog.csdn.net/liuk10/article/details/509

Android开发进阶:如何读写Android文件

Android主要有四大主要组件组成:Activity.ContentProvider.Service.Intent组成.Android文件的运行主要需要读写四大组件的文件.本文将介绍如何读写Android文件,希望对正在进行Android开发的朋友有所帮助. 文件存放位置 在Android中文件的I/O是存放在/data/data/<package name>/file/filename目录下. 提示:Android是基于linux系统的,在linux的文件系统中不存在类似于Windows的

读&lt;iOS开发进阶&gt;有感

花了两天时间, 零零散散看完了这本书.总的来说, 比较失望吧. 花点时间记录下. 第一次看到这本书, 是在看唐巧大神博客的时候看到的  ---------->  <iOS开发进阶>即将出版 那时候, 就被吸引住了.原因不外乎如下三点: 作者: 唐巧大神写的书, 怎么能错过 内容: 开发进阶, 学习了iOS有一段时间, 确实比较期待这类的书籍 封面: 简约大气, 很喜欢. 然后就一直等出版, 本来说12月底就能出版, 然后一直拖, 当当要到1月20号左右才正式出售, 现在都是预售阶段..