第七课的主要内容:iPad 和iPhone的通用程序
这节课主要讲如何在一个程序里适配iPad 和iPhone。
内容简介
1、UIToolbar上面放的都是UIBarButtonItem
可以参考iOS学习之UINavigationController详解与使用(三)ToolBar
这节课的Demo是把UIToolbar拖放到iPad的故事版的顶部来使用。
2、UISplitViewController
UISplitViewController只能在iPad的storyboard使用。
3、UISplitViewControllerDelegate
Showing and Hiding View Controllers
- –splitViewController:shouldHideViewController:inOrientation:
- –splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
- –splitViewController:willShowViewController:invalidatingBarButtonItem:
- –splitViewController:popoverController:willPresentViewController:
这几个代理方法会用到。
有了这些理论知识后,
开始Demo
先得有上节课的材料:Psychologist.zip 的程序。把这个项目下载下来,打开。
在开始弄iPad之前,先解决下下面这个bug.
在前面的课程都是用的iPhone的项目。这次打开源码后,运行时选择模拟器选择iPad。运行后
按command+ ->改变模拟器的方向,上面的的button显示不大好看,改一下 spring&structs。
这样在app水平放下时按钮自动缩放了。
开始通用程序的修改吧
1、修改项目设置为Universal。
打开项目targets
把原来的MainStoryboard.storyboard改名成:iPhone.storyboard。
对应的targets也改成iPhone.storyboard。
新建一个iPad.storyboard,targets里添加iPad.storyboard。
2、在iPad.storyboard拖放一个UISplitViewController。
iPad.storyboard里是一片空白,放进去UISplitViewController好大个家伙。
后面的table view controller不需要,删掉。
3、新建RotatableViewController
新建RotatableViewController之后,把iPhone storyboard里的Psychologist界面拷到iPad.storyboard
然后在navigation Controller上按住control拖到Psychologist界面上,选择relationship 为root view。
把对应的Dr.Pill 和Dr. Freud都拷过来,从两个按钮那拖过来选push方式。
把Psychologist的界面的class设置为:RotatableViewController
RotatableViewController的代码如下:
#import <UIKit/UIKit.h>
@interface RotatableViewController : UIViewController<UISplitViewControllerDelegate>
@end
#import "RotatableViewController.h"
#import "SplitViewBarButtonItemPresenter.h"
@interface RotatableViewController ()
@end
@implementation RotatableViewController
- (void)awakeFromNib
{
[super awakeFromNib];
self.splitViewController.delegate = self;
}
- (id <SplitViewBarButtonItemPresenter>)splitViewBarButtonItemPresenter
{
id detailVC = [self.splitViewController.viewControllers lastObject];
if (![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]) {
detailVC = nil;
}
return detailVC;
}
- (BOOL)splitViewController:(UISplitViewController *)svc
shouldHideViewController:(UIViewController *)vc
inOrientation:(UIInterfaceOrientation)orientation
{
return [self splitViewBarButtonItemPresenter] ? UIInterfaceOrientationIsPortrait(orientation) :NO;
}
- (void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc
{
barButtonItem.title = self.title;
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;
}
-(void)splitViewController:(UISplitViewController *)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = nil;
}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{ return YES;}@end
4、设置HappinessViewController
把iPad.storyboard上最大的detail 的controller设置它的class为HappinessViewController。
再拖放一个空白的view到上面去,选择view,设置view的class为FaceView。
点住Happiness View controller的黄色按钮,再按住conrtol按钮拖到view上,选择faceView。
现在运行看下效果:
运行正常。
不过现在还没有和它的幸福度关联起来。
5、关联幸福度
在PsychologistViewController.m文件里修改添加如下:
- (HappinessViewController *)splitViewHappinessViewController
{
id hvc = [self.splitViewController.viewControllers lastObject];
if (![hvc isKindOfClass:[HappinessViewController class]]) {
hvc = nil;
}
return hvc;
}
- (void)setAndShowDiagnosis:(int)diagnosis
{
self.diagnosis = diagnosis;
if ([self splitViewHappinessViewController]) {
[self splitViewHappinessViewController].happiness = diagnosis;
}else{
[self performSegueWithIdentifier:@"ShowDiagnosis" sender:self];
}
}
这样就ok了。
6、添加UIToolbar
在iPad.storyboard大大的view的最上面拖放一UIToolbar ,把item删掉。关联代码里的toolbar 。
添加一个protocol
新建protocol
SplitViewBarButtonItemPresenter
#import <UIKit/UIKit.h>
@protocol SplitViewBarButtonItemPresenter <NSObject>
@property (nonatomic, strong) UIBarButtonItem *splitViewBarButtonItem;
@end
HappinessViewController .h
#import <UIKit/UIKit.h>
#import "SplitViewBarButtonItemPresenter.h"
@interface HappinessViewController : UIViewController<SplitViewBarButtonItemPresenter>
@property (nonatomic) int happiness; // 0 is sad; 100 is very happy
@end
HappinessViewController实现协议。
#import "HappinessViewController.h"
#import "FaceView.h"
@interface HappinessViewController() <FaceViewDataSource>
@property (nonatomic, weak) IBOutlet FaceView *faceView;
@property (nonatomic, weak) IBOutlet UIToolbar *toolbar;
@end
@implementation HappinessViewController
@synthesize happiness = _happiness;
@synthesize faceView = _faceView;
@synthesize splitViewBarButtonItem = _splitViewBarButtonItem;
@synthesize toolbar = _toolbar;
- (void)setSplitViewBarButtonItem:(UIBarButtonItem *)splitViewBarButtonItem
{
if (_splitViewBarButtonItem != splitViewBarButtonItem) {
NSMutableArray *toolbarItems = [self.toolbar.items mutableCopy];
if (_splitViewBarButtonItem) {
[toolbarItems removeObject:_splitViewBarButtonItem];
}
if (splitViewBarButtonItem) {
[toolbarItems insertObject: splitViewBarButtonItem atIndex:0 ];
}
self.toolbar.items = toolbarItems;
_splitViewBarButtonItem = splitViewBarButtonItem;
}
}
//.......
运行,看下效果:
看到toolbar了,可以点它展开左边的栏。可以按 command+ 方向键来跳转模拟器的放下看效果。
这是跟着视频做好的代码http://download.csdn.net/detail/totogo2010/4927845
容芳志 (http://blog.csdn.net/totogo2010)
本文遵循“署名-非商业用途-保持一致”创作公用协议
分享到:
相关推荐
IOS应用源码——斯坦福大学公开课:iOS程序开发教程(PPT+代码).zip
资源名称:2013斯坦福大学公开课iOS开发课程PPT(18课)资源目录:【】斯坦福ios开发课程2013 PPT课件【】斯坦福公开课ios开发2013版本0118【】斯坦福公开课ios开发2013版本0218【】斯坦福公开课ios开发2013版本0318...
斯坦福大学公开课:ios7应用开发第五讲Attributor源码,刚刚编写完毕,可直接下载运行。
斯坦福大学iOS开发公开课PPT教程(2010年秋)
斯坦福大学公开课:iOS 7应用开发 本课程共18集 翻译完 欢迎学习 课程介绍 最新更新课程,适用于iOS7。本课程介绍了使用Xcode5建造iPhone平台上的应用程序所需的工具和应用程序接口;使用多点触控技术,为手机等终端...
斯坦福大学公开课:iOS 7应用开发 全套课件课后作业 加全套优化字幕 ,文件太大分两个压缩包,另一个见ios7 all_in_one_2,字幕可以直接加载,mac os 在mplayer里面可以直接切换字幕
斯坦福大学公开课 ios5 详细讲解第一个ios程序Calculator 以及 Xcode的使用 斯坦福经典教程。适合初学者快速入门。下载看看吧。
斯坦福大学公开课《iOS 7》.part1 PDF+CODE
斯坦福大学公开课:ios7应用开发第二讲和第三讲中讲述的基于第一讲的Michismon添加match改进版MichismonMatch源码,可直接运行
斯坦福大学开放课程:iOS开发教程2010年秋(Lecture 13)
斯坦福大学公开课《iPad和iPhone应用开发(iOS5)》.part1 PDF+CODE
网易公开课--斯坦福大学公开课:iOS 7应用开发-源码,源自网络
斯坦福大学公开课 :机器学习课程。课件+原版讲义+学习笔记(全高清,最全!)
包含了斯坦福大学公开课:ios7应用开发第一讲的Michismon源码,可直接运行。
斯坦福大学公开课《Developing iOS 8 Apps with Swift》PDF
斯坦福大学公开课:IOS7应用开发课件PPT developing-ios-7-apps-for standford ios7
斯坦福大学公开课《iPad和iPhone应用开发(iOS5)》.part2 PDF+CODE
斯坦福大学公开课:iOS 7应用开发 全套课件课后作业 加全套优化字幕 第二部分,文件太大分两个压缩包,另一个见ios7 all_in_one_1
斯坦福大学公开课:ios7应用开发第7讲SuperCard实现代码,主要实现了绘制自己的视图,以扑克牌为例,可直接运行。
斯坦福大学公开课-机器学习-个人笔记完整版v4.21,翻译并整理了重点