学习笔记-斯坦福iOS7-第十一课:表格视图和iPad

一. 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;

- (void)endRefreshing;


b. 默认没有该功能,开启改功能,可在设计器中,TableViewController - Refreshing - Enabled


5. 数据发生变化后
a. -(void)reloadData; // 刷新可见的行
b. -(void)reloadRowsAtIndexPaths:(NSArray*)indexPaths
withRowAnimation:(UITableViewRowAnimation)animationStyle;
// 刷新部分行


二. Universal Applications (通用应用)
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值