ストーリーボードへの変換のリリースノート

2013. 05. 09
ストーリーボードはiOSアプリケーションのユーザインターフェイスを作成するための新しい方法で、iOS 5およびXcode 4.2から利用することができます。
ストーリーボードを使用すると、Xcodeの設計キャンバスにシーンとしてアプリケーションを構成するビューコントローラを設計し、セグエを使用してシーン間のナビゲーションを視覚的に定義することができます。

ストーリーボードを使用するように既存のiOSアプリケーションのプロジェクトを変換するには、いくつかの工程が必要となります。
更に採用することができる他の新しいパターンもあります。



目次

アプリケーションデリゲートの構成

プロジェクトへのストーリーボードの追加

プロジェクトのメインストーリーボードの設定

最初のビューコントローラへのアクセス

テーブルビューの構成



アプリケーションデリゲートの構成

アプリケーションデリゲートは、ストーリーボードの読み込みとウィンドウの管理をする責任があります。
貴方はUIApplicationMainのアプリケーションデリゲート名を指定し、アプリケーションデリゲートがwindowを呼び出してプロパティを保持する責任があります。

既存のアプリケーションデリゲートクラスを持っていない場合は、生成する必要があります。
最小限の実装は以下のようになります。

リスト1-1 最小アプリケーションデリゲートヘッダファイル

#import <UIKit/UIKit.h>
@interface AppDelegate : NSObject <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

リスト1-2 最小アプリケーションデリゲート実装ファイル

#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@end

:現在のXcodeテンプレートでは、アプリケーションデリゲートクラスはUIResponderを継承しています。
これはデリゲートのインスタンスがレスポンダチェーンに参加し、アプリケーションレベルのアクションの処理ができるようにするためです。
既存のアプリケーションでこのパターンの使用を用いていない場合、ストーリーボードのために採用する必要はありません。

main.mファイルでは、UIApplicationMainでアプリケーションデリゲートクラスを設定しています。

既存のmain.mファイルはおそらくこのようになっています。

#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;
}

以下のように変更します。

#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への移行のリリースノート』参照)



プロジェクトへのストーリーボードの追加

プロジェクトに新しいストーリーボードファイルを追加します。
慣例により、初期ストーリーボードはMainStoryboardと名付けられています。

オブジェクトライブラリからストーリーボードに最初のビューコントローラを追加します。
それが最初のシーンであることを示すソース無しセグエが表示されるはずです。

firstViewController.png

最初のビューコントローラがナビゲーションコントローラやタブバーコントローラとしてコンテナに組み込まれている場合、適切にそれを組み込むために『Editor > Embed In』を使用します。
ソース無しセグエは、現在コンテナビューコントローラを示している必要があります。

embeddedFirstViewController.png



プロジェクトのメインストーリーボードの設定

アプリケーションターゲットのSummaryでは、貴方が生成したストーリーボードファイル名にMain Storyboardの値を設定します。
Main Interface(最初のnibファイルの指定で)の値が存在する場合は、それを削除してください。

setMainStoryboard.png



最初のビューコントローラへのアクセス

アプリケーションデリゲートはストーリーボードで表現されません。
(例えば、Core Dataアプリケーションを作成し、最初のビューコントローラにデリゲートの管理オブジェクトコンテキストを渡したい場合など)最初のビューコントローラにアクセスする必要がある場合、ウィンドウのrootViewControllerを介して行うことができます。
ルートビューコントローラが(UINavigationControllerのインスタンスなど)コンテナコントローラの場合、コンテナのコンテンツのために適切なアクセサを使用してビューコントローラにアクセスすることができます。
例えば、

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UINavigationController *rootNavigationController = (UINavigationController *)self.window.rootViewController;
    MyViewController *myViewController = (MyViewController *)[rootNavigationController topViewController];
    // Configure myViewController.
    return YES;
}



テーブルビューの構成

ストーリーボードを使用する時に、テーブルビューでの作業にいくつかの新しい方法があります。
  • dequeueReusableCellWithIdentifier:メソッドは(与えられた識別子を持つセルを定義している場合)セルを返すことが保証されています。
    したがって、以前の通常のtableView:cellForRowAtIndexPath:の実装の際の、"メソッドの戻り値をチェックする"パターンを使用する必要はありません。
    つまり以前の記述、

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    } // Configure and return the cell.

    の代わりに、今は以下のように記述します。

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // Configure and return the cell.

  • テーブルビューのテーブルビューセルを直接構成することができます。
    デフォルトではプロトタイプのセルスタイルはCustomに設定されていますが、貴方の独自設計のセルにすることができます。
    またAttributes Inspectorを使用することによって、組み込みのUITableViewCellのセルスタイルの一つにスタイルを設定することができます。

    cellStyle.png

  • テーブルビュー、つまりUITableViewControllerのインスタンスのビューは、ストーリーボードに直接静的コンテンツを構成することができます。
    Attributes Inspectorで、Static Cellsにテーブルビューのコンテンツを設定します。

    staticCells.png

    静的セルを使用する場合、実行時にセルの内容を構成することができるように、個々のセルにテーブルビューコントローラからアウトレットを接続することができます。

    // Declare properties for the outlets.
    @property (nonatomic, weak) IBOutlet UITableViewCell *firstGroupFirstRowCell;

    // Configure cells directly.
    firstGroupFirstRowCell.detailTextLabel.text = newTextValue;



参考文献

Apple/Converting to Storyboards Release Notes

0 CommentsPosted in 資料





Bose QuietComfort 25
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
02 | 2017/03 | 03
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
Recent Articles
iTunes


Swift
Categories
Tips
WACOM


Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
BOSE

Bose QuietComfort 25
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
SQLite
OpenGL ES
Amazon


Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Profile

Author:水月杏香
永遠の初心者プログラマ。

QR Code
QR
Visitors