第七课的主要内容: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的适配问题。



斯坦福大学公开课 iOS应用开发教程学习笔记(第七课)UIToolbar、iPad 和iPhone的通用程序_ios