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 ...
随机推荐
- chrome浏览器本地文件支持ajax请求的解决方法
.右键chrome的快捷键--->点击属性 .在快捷方式的选项卡的目标里末尾填上如下内容: --allow-file-access-from-files 要关闭所有的chrome打开的网页
- JDK,常见数据结构解读
一.情有独钟 对数据结构情有独钟,打算慢慢把jdk里的实现都读一遍,发现其中的亮点,持续更新. 二.ArrayList 这应该是我们学习java最早接触的到的数据结构,众所周知,数组在申请了内存之后, ...
- SQL使用子查询,查找班级成绩最高分
-- 根据要求,获取班级成绩的最高分的学生-- 第一个子查询,先去各个科目的最高,再横向比较各个科目的最高,再取最高分的那个科目-- 第二个子查询,查询每个同学的最高分-- 最后,通过第一个子查询查询 ...
- POJ 1063
#include <iostream> using namespace std; int main() { //freopen("acm.acm","r&qu ...
- 安装nginx和nginx-gridfs和mongodb
1.安装依赖包: [root@mongo_rs1 ~]# yum -y install pcre-devel openssl-devel zlib-devel git gcc gcc-c++ [roo ...
- Android学习之一
- 解决ssh/scp报错:Someone could be eavesdropping on you right now (man-in-the-middle attack)!
主要现象:ssh/scp 失败,host key verification failed. # scp /home/iso/********.iso root@192.168.1.***:/home/ ...
- Qt: QTimer和QThread
让QTimer 跑在其他线程. 一般写法如下. 1. 在main thread中为worker thread指定定时器. QThread* thread = new QThread(this); th ...
- Spring Security构建Rest服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商
实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码 认证服务器: 新建 ImoocAuthenticationServerConfig 类,@Ena ...
- Chapter 3 Phenomenon——14
They wheeled me away then, to X-ray my head. 他们把我移到了一边用X光照射我的头. 他们把我放到轮椅上,推着我去做头部X光检查. I told them t ...