学习笔记-斯坦福iOS7-第十一课:表格视图和iPad
来源:互联网 发布:mac 虚拟机免费 编辑:程序博客网 时间:2024/05/16 19:21
一. UITableVIew
1. storyboard 中拖入一个TableViewController,可对Cell进行style定义,或custom;
记住一定设置Cell 的 identifier,代码里提供UITableViewCell数据源时用到的唯一值。
2. protocols :dataSource and delegate;
a. dataSource
主要包括3个:table里多少sections;section里多少rows;提供一个UITableViewCell用来显示row;
注:动态table才需要数据源,静态table已经创建好,直接修改值即可。
b. delegate
主要包括:
.行被选中 : - (void)tableView:(UITableVIew*)sender didSelectRowAtIndexPath:(NSIndexPath*)path;
.行右边的叹号被点击:- (void)tableView:(UITableVIew*)sender
accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*)indexPath;
3. UITableVIew Segue
通过设计器对cell 连接其他VC,如何知道是哪个cell被点击的,通过下面代码:
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {
NSIndexPath* indexPath = [self.tableView indexPathForCell:sender];
...
}
4. UITableView Spinner
a. UITableViewController 有“activity indicator”控件:UIRefreshControl
- (void)beginRefreshing;
5. 数据发生变化后
a. -(void)reloadData; // 刷新可见的行
b. -(void)reloadRowsAtIndexPaths:(NSArray*)indexPaths
withRowAnimation:(UITableViewRowAnimation)animationStyle;
// 刷新部分行
1. 不同Xcode版本默认创建Universal时,创建storyboard的个数有些不同,具体可参加:
http://blog.csdn.net/sharpyl/article/details/51800130
2. 判断是否iPad
BOOL iPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceidiomPad);
3. iPad上同时可以显示多个MVCS,所以检测MVC 是否在屏幕上显示:
if (self.view.window == nil) // 没有在屏幕上显示
4. UISplitViewController
a. 在storyboard设计时,必须是顶层MVC,不能放到tabbarController or navigationController!
b. 访问Master and Detail
. 所有UIViewController 都有个属性: @property (strong)UISplitViewController *splitViewController;
如果splitViewController 为nil,说明VC 没在splitViewController 上;
. UISplitViewController 有属性:@property (copy) NSArray* viewControllers; //0:master, 1:Detail;
5. UISplitViewControllerDelegate
a. 设置delegate必须非常早,在 awakeFromNib 中,被调用时在viewDidLoad之前;
并且delegate被调用时,outlets 没有被设置好呢。
b. 给出master是否显示:
- (BOOL)splitViewController:(UISplitViewController*)sender
shouldHideViewController:(UIViewController*)master
inOrientation:(UIInterfaceOrientation)orientation {
return NO; /// 从来不隐藏
return UIInterfaceOrientationIsPortrait(orientation); /// 竖屏隐藏master;
}
c. 当master 隐藏时,需要实现下面委托,来显示一个按钮,点击该按钮,master会显示出来,如果没有实现该委托,按钮不会显示:
- (void)splitViewController:(UISplitViewController*)sender
willHideViewController:(UIViewController*)master
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)popover {
barButtonItem.title = master.title;
self.navigationItem.leftBarButton = barButtonItem; ///
}
d. 当master显示时,实现下面委托,隐藏按钮
- (void)splitViewController:(UISplitViewController*)sender
willShowViewController:(UIViewController*)master
invalidatingBarButtonItem:(UIBarButtonItem*)barButtonItem {
self.navigationItem.leftBarButton = nil;
}
6. master 变化时,更新detail
a. target/action , master 响应action 后,再调用detail 接口,更新detail;
b. replace segue ,这种方法比较麻烦,很少用。
7. UIPopoverController
a. 本身不是UIViewController,是NSObject,他的作用是控制另一个UIViewController 弹出;按control拖动contentViewController到storyboard;
b. 创建popover segue
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {
if([segue isKindOfClass:[UIStoryboardPopoverSegue class]]) {
UIPopoverController *popoverController = ((UIStoryboardPopoverSegue*)segue).popoverController;
...
}
}
c. popover 消失
. code:- (void)dismissPopoverAnimated:(BOOL)animated;
. delegate: 消失时,会被调用:- (void)popoverControllerDidDismissPopover:(UIPopoverController*)sender;
三. demo - 摄影爱好者
包括:UITableView, Flickr, Universal Application, UISplitViewController, UIRefreshControl, GCD。
1. storyboard 中拖入一个TableViewController,可对Cell进行style定义,或custom;
记住一定设置Cell 的 identifier,代码里提供UITableViewCell数据源时用到的唯一值。
2. protocols :dataSource and delegate;
a. dataSource
主要包括3个:table里多少sections;section里多少rows;提供一个UITableViewCell用来显示row;
注:动态table才需要数据源,静态table已经创建好,直接修改值即可。
b. delegate
主要包括:
.行被选中 : - (void)tableView:(UITableVIew*)sender didSelectRowAtIndexPath:(NSIndexPath*)path;
.行右边的叹号被点击:- (void)tableView:(UITableVIew*)sender
accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*)indexPath;
3. UITableVIew Segue
通过设计器对cell 连接其他VC,如何知道是哪个cell被点击的,通过下面代码:
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {
NSIndexPath* indexPath = [self.tableView indexPathForCell:sender];
...
}
4. UITableView Spinner
a. UITableViewController 有“activity indicator”控件:UIRefreshControl
- (void)beginRefreshing;
- (void)endRefreshing;
5. 数据发生变化后
a. -(void)reloadData; // 刷新可见的行
b. -(void)reloadRowsAtIndexPaths:(NSArray*)indexPaths
withRowAnimation:(UITableViewRowAnimation)animationStyle;
// 刷新部分行
1. 不同Xcode版本默认创建Universal时,创建storyboard的个数有些不同,具体可参加:
http://blog.csdn.net/sharpyl/article/details/51800130
2. 判断是否iPad
BOOL iPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceidiomPad);
3. iPad上同时可以显示多个MVCS,所以检测MVC 是否在屏幕上显示:
if (self.view.window == nil) // 没有在屏幕上显示
4. UISplitViewController
a. 在storyboard设计时,必须是顶层MVC,不能放到tabbarController or navigationController!
b. 访问Master and Detail
. 所有UIViewController 都有个属性: @property (strong)UISplitViewController *splitViewController;
如果splitViewController 为nil,说明VC 没在splitViewController 上;
. UISplitViewController 有属性:@property (copy) NSArray* viewControllers; //0:master, 1:Detail;
5. UISplitViewControllerDelegate
a. 设置delegate必须非常早,在 awakeFromNib 中,被调用时在viewDidLoad之前;
并且delegate被调用时,outlets 没有被设置好呢。
b. 给出master是否显示:
- (BOOL)splitViewController:(UISplitViewController*)sender
shouldHideViewController:(UIViewController*)master
inOrientation:(UIInterfaceOrientation)orientation {
return NO; /// 从来不隐藏
return UIInterfaceOrientationIsPortrait(orientation); /// 竖屏隐藏master;
}
c. 当master 隐藏时,需要实现下面委托,来显示一个按钮,点击该按钮,master会显示出来,如果没有实现该委托,按钮不会显示:
- (void)splitViewController:(UISplitViewController*)sender
willHideViewController:(UIViewController*)master
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)popover {
barButtonItem.title = master.title;
self.navigationItem.leftBarButton = barButtonItem; ///
}
d. 当master显示时,实现下面委托,隐藏按钮
- (void)splitViewController:(UISplitViewController*)sender
willShowViewController:(UIViewController*)master
invalidatingBarButtonItem:(UIBarButtonItem*)barButtonItem {
self.navigationItem.leftBarButton = nil;
}
6. master 变化时,更新detail
a. target/action , master 响应action 后,再调用detail 接口,更新detail;
b. replace segue ,这种方法比较麻烦,很少用。
7. UIPopoverController
a. 本身不是UIViewController,是NSObject,他的作用是控制另一个UIViewController 弹出;按control拖动contentViewController到storyboard;
b. 创建popover segue
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {
if([segue isKindOfClass:[UIStoryboardPopoverSegue class]]) {
UIPopoverController *popoverController = ((UIStoryboardPopoverSegue*)segue).popoverController;
...
}
}
c. popover 消失
. code:- (void)dismissPopoverAnimated:(BOOL)animated;
. delegate: 消失时,会被调用:- (void)popoverControllerDidDismissPopover:(UIPopoverController*)sender;
三. demo - 摄影爱好者
包括:UITableView, Flickr, Universal Application, UISplitViewController, UIRefreshControl, GCD。
这个demo 比较全面!
0 0
- 学习笔记-斯坦福iOS7-第十一课:表格视图和iPad
- 学习笔记-斯坦福iOS7-第十三课:Core Data 和表格视图
- 学习笔记-斯坦福iOS7-第五课:视图控制器生命周期
- 学习笔记-斯坦福iOS7-第七课:视图,绘制,手势识别
- 学习笔记-斯坦福iOS7-第十课:多线程,滚动视图
- 学习笔记-斯坦福iOS7-第十二课:文档和Core Data
- 学习笔记-斯坦福iOS7-第十四课:UIApplication和MapKit
- 学习笔记-斯坦福iOS7-第十五课:MapKit和嵌入Segue
- 学习笔记-斯坦福iOS7-第十六课:模态segue、文本框、警告视图
- 学习笔记-斯坦福iOS7-第四课:框架和带属性字符串
- 学习笔记-斯坦福iOS7-第八课:协议,block,动画
- 学习笔记-斯坦福iOS7-第九课:动画,自动布局
- 学习笔记-斯坦福iOS7-第六课:控制器多态性,导航控制器,选项卡控制器
- 学习笔记-斯坦福iOS7-第十七课:摄像头、Core Motion、Application Stat
- 机器学习斯坦福公开课学习笔记
- 斯坦福机器学习公开课笔记
- 斯坦福机器学习公开课笔记7
- 斯坦福课程学习笔记
- [HTML/CSS]盒子模型,块级元素和行内元素
- 缺页率的计算方法
- 反射模拟DbUtils实现ResultSet转成Bean实例
- 游戏测试---------------第6章
- cesiumjs开发实践 (六)
- 学习笔记-斯坦福iOS7-第十一课:表格视图和iPad
- gearman rabbitMQ等 异步队列方案
- java中HashSet详解
- 如何解决Win10 Win7 无法通过\\访问winxp文件
- Android UI线程和非UI线程
- 多线程Java
- @Configuration+@Bean & @Component & @Resource/@autowired/@Inject
- JAVA中int、String的类型转换
- 文本分词中词语词性标注说明