iOS中表视图单元格事件用nib和storyboard的两种写法总结
从ios6开始,苹果公司推出了storyborad技术取代了nib的写法,这样代码量确实少写了很多,也比较简洁。但是,从学习的角度来说,阿堂认为 用nib的写法,虽然多了些代码,但是对于掌握知识和原理的角度来说,我认为nib写法也挺不错的。用storyborad的写法时,如果segue场景 较多的话,设置有问题的话,会导致一些异常的发生,增加调试的难度。下面阿堂亲自了测试了nib和storyboard的两种写法的demo。下面将其差 异之处简单对比了下,供有需掌握的网友了解下。
demo效果图如下
对于表视图的单元cell选中时,两种写法是不一样的。下面是阿堂分别取自于 ViewController.m和 CitiesViewController.m方中的写法
一.代码的写法比较
ViewController.m
nib写法
#pragma mark - 实现表视图委托方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger row = [indexPath row];
CitiesViewController *citiesViewController = [[CitiesViewController alloc] initWithStyle:UITableViewStylePlain];
NSString *selectName = [self.listData objectAtIndex:row];
citiesViewController.listData = [self.dictData objectForKey:selectName];
citiesViewController.title = selectName;
[self.navigationController pushViewController:citiesViewController animated:YES];
}
storyboard写法
//选择表视图行时候触发
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"ShowSelectedProvince"])
{
CitiesViewController *citiesViewController = segue.destinationViewController;
NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
NSString *selectName = [self.listData objectAtIndex:selectedIndex];
citiesViewController.listData = [self.dictData objectForKey:selectName];
citiesViewController.title = selectName;
}
}
CitiesViewController.m
nib写法
#pragma mark - 实现表视图委托方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger row = [indexPath row];
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
NSDictionary *dict = [self.listData objectAtIndex:row];
detailViewController.url = [dict objectForKey:@"url"];
NSString *name = [dict objectForKey:@"name"];
detailViewController.title = name;
[self.navigationController pushViewController:detailViewController animated:YES];
}
storyboard写法
//选择表视图行时候触发
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"ShowSelectedCity"])
{
DetailViewController *detailViewController = segue.destinationViewController;
NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
NSDictionary *dict = [self.listData objectAtIndex:selectedIndex];
detailViewController.url = [dict objectForKey:@"url"];
NSString *name = [dict objectForKey:@"name"];
detailViewController.title = name;
}
}
二. 操作方式上
storyboard的 导航浏览器,不需要代码定义,直接选中某viewcontroller ,再选中菜单操作
Editor-->Embed in--->Navigation Controller
从 一个viewcontroller 导航到另一个viewcontroller时,直接在界面 push就可以了 ,push时,需要选中 连线中间的segue,打开其中的属生检查器,然后在identifier属性中指明,如 ShowSelectedProvinces
iOS中表视图单元格事件用nib和storyboard的两种写法总结的更多相关文章
- iOS集合视图单元格高亮和选中的区别
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...
- iOS:集合视图UICollectionView、集合视图控制器UICollectionViewController、集合视图单元格UICollectionViewCell(创建表格的另一种控件)
两种创建表格方式的比较:表格视图.集合视图(二者十分类似) <1>相同点: 表格视图:UITableView(位于storyboard中,通过UIViewController控制器实现 ...
- IOS之表视图单元格删除、移动及插入
1.实现单元格的删除,实现效果如下 - (void)viewDidLoad { [super viewDidLoad]; //设置导航栏 self.editButtonItem.title = @&q ...
- iOS tableView 静态单元格的实现
本文转自:http://home.cnblogs.com/u/wendingding/ iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一 ...
- asp.net gridview中增加单击单元格事件
实现功能:单击表格中某个单元格(不是第一列.最后一列.最后一行,不为0)根据行第一个单元格内容及列名来查询详细内容,在消息框中查看显示. 在代码中增加 protected override void ...
- iOS:多个单元格的删除(方法一)
采用存取indexPath的方式,来对多个选中的单元格进行删除 删除前: 删除后: 分析:如何实现删除多个单元格呢?这需要用到UITableView的代理方法,即选中单元格时对单元格做的处理,同时我们 ...
- iOS:UITableViewCell自定义单元格
UITableViewCell:自定义的单元格,可以在xib中创建单元格,也可以在storyBorad中创建单元格.有四种创建方式 <1>在storyBorad中创建的单元格,它是静态的单 ...
- iOS:多个单元格的删除(方法二):
前面介绍了万无一失的方法一,这里介绍删除单元格的第二种方式,通过删除单元格中的内容的方式进行操作:(但是这种情况有一个小的弊端,由于单元格重用机制,如果单元格内容一样时,标记的存在会造成误删) 删除前 ...
- IOS 取消表格单元格 TableViewCell 去掉高亮状态 点击Cell取消选择状态
以下是两种实现效果 1. 自定义cell 继承UITableViewCell 重写 -(void)setSelected:(BOOL)selected animated:(BOOL)animated ...
随机推荐
- 三,mysql优化--sql语句优化之索引一
1,需求:如何在一个项目中,找到慢查询的select,mysql数据库支持把慢查询语句,记录到日志中.供程序员分析.(默认不启用此功能,需要手动启用) 修改my.cnf文件(有些地方是my.ini) ...
- CTFcrackTools-V3 – 一款旨在帮助 CTFer 在 CTF 中发挥作用的一个框架
CTFcrackTools-V3 CTFcrackTools重置版 作者:米斯特安全-林晨.摇摆.奶权 米斯特安全团队首页:http://www.hi-ourlife.com/ 部分插件来源:希望团队 ...
- webpack快速入门——打包后如何调试
在配置devtool时,webpack给我们提供了四种选项. source-map:在一个单独文件中产生一个完整且功能完全的文件.这个文件具有最好的source map,但是它会减慢打包速度: che ...
- mysql-mmm
查看mmm集群状态: mmm_control show 给主机设置ip: mmm_control set_ip ip host 改变状态: mmm_control set_passive|active ...
- jvm(1)类的加载(二)(自定义类加载器)
[深入Java虚拟机]之四:类加载机制 1,从Java虚拟机的角度,只存在两种不同的类加载器: 1,启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认的虚拟机,有其他 ...
- 2014年10月Android面试总结
最近打算跳槽,所以到外面逛了一圈,发现外面的世界还是比较精彩的,同时也认识了自己的一些不足,以及作为一个Android开发者,自己后面需要掌握的东西做一下列举. 先介绍下本人的工作经历吧,本人11年7 ...
- postgresql模糊匹配正则表达式性能问题
postgresql 模糊匹配 目前建议使用like,~~,不建议使用正则表达式, 目前有性能问题 https://yq.aliyun.com/articles/405097 正则表达式效率比较低 ...
- Oracle 数据库维护管理之--dbms_lock
1.查询相关的v$视图,但是提示表或视图不存在解决办法 原因是使用的用户没有相关的查询权限导致 解决办法: grant select any dictionary to 用户; --这 ...
- .Net Core 发布WindowsServices
项目代码文件夹 执行命令 dotnet publish -c Release -r win-x64
- 剑指offer四十七之求1+2+3+...+n
一.题目 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 二.思路 1.需利用逻辑与的短路特性实现递归终 ...