一. 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 比较全面!