转换到 StoryBoard 的公布说明(Converting to Storyboards Release Notes)
html
太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)ios
本文遵循“署名-非商业用途-保持一致”创做公用协议canvas
转换到 StoryBoard 的公布说明(Converting to Storyboards Release Notes)app
Storyboarding 是一种新的方式用于建立 iOS 应用的用户界面。从 iOS 5 和 Xcode 4.2 開始引入。使用 storyboard,你可以把组成你的应用的视图控制器设计成 Xcode 设计画布中的场景。并且使用 segue 在场景间可视化地定义导航。less
Storyboarding is a new way to create user interfaces for iOS applications, beginning with iOS 5 and Xcode 4.2. Using storyboards, you can design the view controllers that compose your application as scenes in the Xcode design canvas and visually define the navigation between the scenes using segues.ide
把一个已有的 iOS 应用转换成使用 storyboard 需要採取一些步骤。另外。有一些其余模式可以採用。post
There are a few steps you need to take to convert an existing iOS application project to use storyboards. In addition, there are other new patterns you can adopt.ui
内容例如如下:this
Contents:
配置应用代理
Configure the Application Delegate
应用代理负责载入 storyboard 并管理窗体。你需要在 UIApplicationMain 中指定应用代理类的名称,并确保应用代理有一个叫 window 的属性。
The application delegate is responsible for loading the storyboard and managing the window. You need to specify the name of the application delegate class in UIApplicationMain, and ensure that the application delegate has a property called window.
假设你没有应用代理类,那么需要建立一个。一个最小实现会像这样:
If you don’t have an existing application delegate class, you need to create one. A minimal implementation would look like this:
Listing 1-1 最小应用代理头文件
Listing 1-1 Minimal application delegate header file
#import <UIKit/UIKit.h> |
@interface AppDelegate : NSObject <UIApplicationDelegate> |
@property (strong, nonatomic) UIWindow *window; |
@end |
Listing 1-2 最小应用代理实现文件
Listing 1-2 Minimal application delegate implementation file
#import "AppDelegate.h" |
@implementation AppDelegate |
@synthesize window = _window; |
@end |
注意: 在当前的 Xcode 模板中,应用代理类继承自 UIResponder.。
这样应用代理实例可以參与到 响应链 (responder chain) 以便处理应用层动做。假设你已存在的应用中未使用这种模式,就没有必须为 storyboard 採纳它。
Note: In the current Xcode templates, the application delegate class inherits from UIResponder. This is so that the delegate instance can participate in the responder chain and so handle application-level actions. If you haven’t made use of this pattern in an existing application, there’s no need to adopt it for storyboards.
在 main.m 文件里 UIApplicationMain 类里设置应用代理。
In the main.m file, set the application delegate class in UIApplicationMain.
已有的 main.m 文件可能看起来像是这样:
Your existing main.m file probably looks something like this:
#import <UIKit/UIKit.h> |
|
int main(int argc, char *argv[]) { |
|
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; |
int retVal = UIApplicationMain(argc, argv, nil, nil); |
[pool release]; |
return retVal; |
} |
把它改为这样:
Change it to look like this:
#import <UIKit/UIKit.h> |
#import "AppDelegate.h" |
|
int main(int argc, char *argv[]) { |
|
@autoreleasepool { |
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); |
} |
} |
(将 “AppDelegate” 替换为你的应用代理类的名字).
注意: @autoreleasepool 是一个新的 Objective-C 语句用于管理本身主动释放池;它可用于所有 Objective-C 模式。并且比使用 NSAutoReleasePool 类更高效(參看 迁移到 ARC 的公布说明(Transitioning to ARC Release Notes))。
Note: @autoreleasepool is a new Objective-C statement for managing autorelease pools; it is available in all Objective-C modes, and is more efficient than using the NSAutoReleasePool class (see Transitioning to ARC Release Notes).
加入 Storyboard 到project中
Add a Storyboard to the Project
加入一个新的 storyboard 到project中。
按惯例,初始 storyboard 命名为 MainStoryboard 。
Add a new storyboard file to the project. By convention, the initial storyboard is named MainStoryboard.
从对象库中加入第一个视图控制器到 storyboard。你应该会看一个无源的 segue。它指示这是第一个场景。
Add your first view controller to the storyboard from the Object library. You should see a sourceless segue indicating that this is the first scene.
假设第一个视图控制器嵌入在诸如导航控制器或分页控制器这种容器中,那么使用 Editor > Embed In 来正确地嵌入它。
无源 segue 现在应该指向容器视图控制器了。
If the first view controller is embedded in a container such as a navigation controller or tab bar controller, then use Editor > Embed In to embed it appropriately. The sourceless segue should now point to the container view controller:
为项目设置主 Storyboard
Set the Main Storyboard for the Project
In the Summary for application Target, set the value of the Main Storyboard to the name of the storyboard file you created. If there is a value for Main Interface (to specify the first nib file), make sure you remove it.
訪问第一个视图控制器
Accessing the First View Controller
The application delegate is not represented in the storyboard. If you need to access the first view controller (for example, if you are creating a Core Data application and want to pass the delegate’s managed object context to the first view controller), you can do so via the window’s rootViewController. If the root view controller is a container controller—such as an instance of UINavigationController—then you can access your view controller using the appropriate accessor for the container’s contents, for example:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
|
UINavigationController *rootNavigationController = (UINavigationController *)self.window.rootViewController; |
MyViewController *myViewController = (MyViewController *)[rootNavigationController topViewController]; |
// Configure myViewController. |
return YES; |
} |
配置表视图
Configuring Table Views
There are several new ways of working with table views when you use storyboards.
Copyright © 2014 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2011-10-12