第七课的主要内容:UIToolbar、iPad 和iPhone的通用程序
1、UIToolbar上面放的都是UIBarButtonItem
他们通常在屏幕的顶部或底部,一个工具栏九四UIBarBUttonItem的集合,行为像button,不是按钮。
他们有target action。可以设置文字,图片等。flexible,fixed。
这节课的Demo是把UIToolbar拖放到iPad的故事版的顶部来使用。
2、UISplitViewController
UISplitViewController只能在iPad的storyboard使用。
基本的UI元素,填充整个屏幕。
有两个ViewController,一个左侧Master,一个右侧Detail 。
@property(nonatomic,copy)NSArray *viewController;//两个,0是左边的,1是右边的
//copy,因为不希望你传递连个ViewController的可变数组,所以复制。
SpliteView设置delegate,主要任务处理旋转。
@property(nonatomic,assign) id <UISplitViewControllerDelegate> delegate;
assign和weak类似,不做零处理。如果assign从堆上释放,得到野指针。
3、UISplitViewControllerDelegate
Showing and Hiding View Controllers
– splitViewController:shouldHideViewController:inOrientation:
-splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
– splitViewController:willShowViewController:invalidatingBarButtonItem:
– splitViewController:popoverController:willPresentViewController:
这几个代理方法会用到。
总是隐藏左边的部分
-(BOOL)splitViewController:(UISplitViewController *)sender shouldHideViewController:(UIViewController *)master inOrientation:(UIInterfaceOrientation)orientation{
return YES;//总是隐藏
//NO从不隐藏
return UIInterfaceOrientationIsPortrait(orientation);//default potrait隐藏
}
处理bar button Item
-(BOOL)splitViewController:(UISplitViewController *)sender willHideViewController:(UIViewController *)master withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popover{
barButtonItem.title = @“master”;
[detailViewController setSplitViewControllerBarButtonItem:barButtonItem];
}
bar button go away
-(BOOL)splitViewController:(UISplitViewController *)sender willShowViewController:(UIViewController *)master invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
[detailViewController removeSplitViewControllerBarButtonItem:nil];
}
setSplitViewControllerBarButtonItem:(UIBarButtonItem *)barButtonItem{
UIToolbar *toolbar = [self toolbar];
NSMutableArray *toolbarItem = [toolbar.items mutableCopy];
…..
}
当master改变后,detail如何更新?
通过Target/Action or segue
4、Popover
UIPopoverController类,不是ViewController,只是一个NSobject,控制viewController
产生一个segue
同样也可以code产生popover
-(void)presentPopoverFromRect:(CGRect)aRect or
inView:(UIView *)view
permittedArrowDirections:(UIPopoverArrowDirection)direction
animated:(BOOL)flag;
or
-(void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)barButtonItem
permittedArrowDirections:(UIPopoverArrowDirection)direction
animated:(BOOL)flag;
不要忘记keep一个strong pointer to the popover Controller
Popover消失
-(void)dismissPopoverAnimated:(BOOL)animated;
5 Universal Applications
怎样知道我是在一个iPad上?
BOOL iPad = (UI_USER_INTERFACE_IDIOM() == UIInterfaceIdiomPad);
当前的界面多大?
CGRect screenBounds = [[UIScreen mainScreen] bounds];
6 Demo
把Psychologist变成一个通用APP
主要使用两个mainStoryBoard分别处理,iPhone和iPad的显示,具体实现,略。
spring&structs的适配问题。