AppSettings(9)~FlipsideViewController

2011. 01. 31
最後に裏面となるフリップサイドビューの設定を行います。

1104

フリップサイドビューはメインビューのインフォメーションボタンをタップすると表示され、スイッチとスライダの設定を行うことができます。

ここでの設定はメインビューだけでなく、Settingsアプリケーションの設定にも反映されます。

ナビゲーションバー左側にあるDoneボタンをタップするとメインビューに戻ります。


●フリップサイドビューコントローラのヘッダファイルFlipsideViewController.hの編集

Settings.bundleからプリファレンス値の読み込みと変更を反映させるため、スイッチとスライダのアウトレットとなるプロパティと、ナビゲーションバーのDoneボタン用のアクションメソッドを宣言します。
(太字が追加した部分)

#import <UIKit/UIKit.h>

@protocol FlipsideViewControllerDelegate;

@interface FlipsideViewController : UIViewController {
    id <FlipsideViewControllerDelegate> delegate;
    UISwitch *strikerUnitSwitch;
    UISlider *breastsSlider;

}

@property (nonatomic, assign) id <FlipsideViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISwitch *strikerUnitSwitch;
@property (nonatomic, retain) IBOutlet UISlider *breastsSlider;


- (IBAction)done:(id)sender;

@end

@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end

1169

最初の@protocolはFlipsideViewControllerDelegateプロトコルの前方宣言で、FlipsideViewControllerDelegateという文字列がプロトコルであることをコンパイラに指示しているものです。

この前方宣言は、インスタンス変数delegateがFlipsideViewControllerDelegateプロトコルに適合するという型宣言のために行っています。

最後の方にある@protocolはFlipsideViewControllerDelegateプロトコルの宣言で、(MainViewControllerで実装している)flipsideViewControllerDidFinish:メソッドを宣言しています。

アクションメソッドdone:も含めて、太字以外はUtility Applicationテンプレートで自動生成されます。

太字で示しているスイッチとスライダのアウトレットが追加した部分です。


●フリップサイドビューのnibファイルFlipsideView.xibの編集

Resources下のFlipsideView.xibをダブルクリックし、Interface Builderで開きます。

デフォルトのフリップサイドビューは、背景色がダークグレーになっています。

1170

DocumentウィンドウでViewを選択し、InspectorウィンドウのAttributesタブで、ViewのBackgroundをLight Gray Colorに変更します。

1171

1172

次にラベル2つとスイッチとスライダを設置します。

 X:Y:W:H:
Label (StrikerUnit)2010611321
Label (Breasts)2016011321
Switch2061039427
Horizontal Slider1818928423

スイッチ用のラベルのテキストは『StrikerUnit』、スライダ用のテキストは『Breasts』とします。

スライダについてはInspectorウィンドウのAttributesタブで、最小値/最大値/初期値をそれぞれ60.00/100.00/80.00に、最小値/最大値の画像をそれぞれturtle.pngとrabbit.pngに設定します。

1173

1174

最後にアウトレットを接続します。

DocumentウィンドウでFile's Ownerを選択し、InspectorウィンドウのConnectionsタブでスライダbreastsSliderとスイッチstrikerUnitSwitchを接続します。
(自動生成されるアクションメソッドdone:は、何も変更していなければ接続済みになっています)

1175


●フリップサイドビューコントローラのソースファイルFlipsideViewController.mの編集

Settings.bundleからプリファレンス値の読み込みと変更を反映させるため、スイッチとスライダのアウトレットとなるプロパティと、ナビゲーションバーのDoneボタン用のアクションメソッドを宣言します。
(太字が追加・修正した部分)

#import "FlipsideViewController.h"
#import "MainViewController.h"

@implementation FlipsideViewController

@synthesize delegate;
@synthesize strikerUnitSwitch;
@synthesize breastsSlider;


- (void)viewDidLoad {
    [super viewDidLoad];
//  self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    strikerUnitSwitch.on = ([[defaults objectForKey:kStrikerUnitKey] isEqualToString:@"Equipped"]) ? YES : NO;
    breastsSlider.value = [defaults floatForKey:kBreastsKey];

}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *prefValue = (strikerUnitSwitch.on) ? @"Equipped" : @"Released";
    [defaults setObject:prefValue forKey:kStrikerUnitKey];
    [defaults setFloat:breastsSlider.value forKey:kBreastsKey];
}


- (IBAction)done:(id)sender {
    [self.delegate flipsideViewControllerDidFinish:self];
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;

    [super viewDidUnload];
    self.strikerUnitSwitch = nil;
    self.breastsSlider = nil;

}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)dealloc {
    [strikerUnitSwitch release];
    [breastsSlider release];

    [super dealloc];
}

@end

1177

1)MainViewController.hのインポート

Settingsアプリケーションのデフォルトオブジェクトから値を取得する際に使うキーのため、MainViewController.hをインポートします。

2)プロパティの実装

ヘッダファイルで宣言したプロパティ、スイッチのstrikerUnitSwitchとスライダのbreastsSliderを実装します。
(delegateは自動生成で実装済みです)

3)viewDidLoadの編集

viewDidLoadでは、Settingsアプリケーションのデフォルトオブジェクトからスイッチとスライダの設定値を取得し、アウトレットに反映させます。

最初に自動生成されているビューの背景色の設定をコメントアウトします。

これはviewFlipsideBackgroundColorメソッドでビューの裏面の色をbackgroundColorに設定しているのですが、今回はInterface Builderで背景色をLight Gray Colorに設定していますので不要になります。

次にSettingsアプリケーションのデフォルトオブジェクトを、NSUserDefaultsクラスのstandardUserDefaultsメソッドで取得します。

取得したインスタンスdefaultsから、インポートしたヘッダファイルMainViewController.hで設定したキー定数を使い、スイッチとスライダの値を設定します。

スイッチは、objectForKey:メソッドで取得される値は独自に設定した文字列ですので、onプロパティでスイッチのON/OFFをさせるために、isEqualToString:メソッドで文字列を判定し、YES/NOに置換して設定しています。

スライダは、floatForKey:メソッドで実数値を取得し、valueプロパティで設定しています。


viewFlipsideBackgroundColor

+ (UIColor *)viewFlipsideBackgroundColor

反転している間のビューの裏面で使用されるシステムカラーを返します。

戻り値はUIColorオブジェクトです。


floatForKey:

- (float)floatForKey:(NSString *)defaultName

指定したキーに関連付けされている浮動小数点値を返します。

戻り値は指定したキーに関連付けされている浮動小数点値で、指定したキーが存在しない場合には0を返します。

defaultName:現在のユーザのデフォルトデータベース内のキーを指定します。

4)viewWillDisappear:の追加

viewWillDisappear:メソッドは、フリップサイドビューが非表示になる際に呼び出されるメソッドで、ここではフリップサイドビューで設定されたスイッチとスライダの値をSettingsアプリケーションのデフォルトオブジェクトに書き戻す処理を行っています。

最初にSettingsアプリケーションのデフォルトオブジェクトを、NSUserDefaultsクラスのstandardUserDefaultsメソッドで取得します。

スイッチは独自の文字列で設定されるので、onプロパティで得たON/OFFの状態を文字列に置換し、setObject:forKey:メソッドで設定します。

スライダはsetFloat:forKey:メソッドで設定します。


setFloat:forKey:

- (void)setFloat:(float)value forKey:(NSString *)defaultName

指定した浮動小数点値を対応するキーを指定してデフォルトに設定します。

setObject:forKeyの機能の一部として呼び出します。

value:デフォルトのデータベースへ設定する浮動小数点値を指定します。

defaultName:浮動小数点値に対応するキーを設定します。

5)done:メソッドについて

done:メソッドは、Utility Applicationテンプレートで自動生成され、フリップサイドビューのナビゲーションバー左側にあるDoneボタンをタップした際に呼び出されるアクションメソッドです。

デリゲートに対し、flipsideViewControllerDidFinish:メソッドで自身(FlipsideViewController)を渡しています。

6)viewDidUnloadの実装

本書ではviewDidUnloadは記述されていませんが、サンプルコードのように2つのプロパティの所有権放棄を行います。

スーパークラスによる初期化は、最初に行っています。

7)shouldAutorotateToInterfaceOrientation:の実装

本書では太字で示されておらず、サンプルコードではコメントアウトされていますが、shouldAutorotateToInterfaceOrientation:のコメントアウトを解除してデフォルトの状態(ポートレートのみ有効)で実装しています。

8)deallocの実装

deallocでは本書やサンプルコードと同じく、2つのプロパティの解放を行っています。


●実行

『ビルドと実行』を行うと、アプリケーションのフリップサイドビューは下図のような表示になります。

1176

ここで設定したスイッチやスライダの値はメインビューだけでなく、Settingsアプリケーションにも反映されます。

1178

1179



参考文献

UIColor Class Reference

NSUserDefaults Class Reference

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

AppSettings(8)~MainViewController(3)

2011. 01. 30
●メインビューコントローラのソースファイルMainViewController.mの編集

ソースファイルでは、アウトレットのプロパティとラベルの設定メソッドrefreshFieldsの実装を行います。
(太字が追加・修正した部分)

#import "MainViewController.h"

@implementation MainViewController

@synthesize nameLabel;
@synthesize ageLabel;
@synthesize countryLabel;
@synthesize strikerUnitLabel;
@synthesize breastsLabel;
@synthesize favoriteTeaLabel;
@synthesize favoriteCandyLabel;
@synthesize favoriteGameLabel;
@synthesize favoriteExcuseLabel;
@synthesize favoriteSinLabel;

- (void)refreshFields {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    nameLabel.text = [defaults objectForKey:kNameKey];
    ageLabel.text = [defaults objectForKey:kAgeKey];
    countryLabel.text = [defaults objectForKey:kCountryKey];
    strikerUnitLabel.text = [defaults objectForKey:kStrikerUnitKey];
    breastsLabel.text = [[defaults objectForKey:kBreastsKey] stringValue];
    favoriteTeaLabel.text = [defaults objectForKey:kFavoriteTeaKey];
    favoriteCandyLabel.text = [defaults objectForKey:kFavoriteCandyKey];
    favoriteGameLabel.text = [defaults objectForKey:kFavoriteGameKey];
    favoriteExcuseLabel.text = [defaults objectForKey:kFavoriteExcuseKey];
    favoriteSinLabel.text = [defaults objectForKey:kFavoriteSinKey];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
 
        // Custom initialization.
    }
    return self;
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self refreshFields];
}
 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    [self refreshFields];
}


- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller {
    [self dismissModalViewControllerAnimated:YES];
    [self refreshFields];
}

- (IBAction)showInfo:(id)sender {
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    controller.delegate = self;

    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];

    [controller release];
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;

    [super viewDidUnload];
    self.nameLabel = nil;
    self.ageLabel = nil;
    self.countryLabel = nil;
    self.strikerUnitLabel = nil;
    self.breastsLabel = nil;
    self.favoriteTeaLabel = nil;
    self.favoriteCandyLabel = nil;
    self.favoriteGameLabel = nil;
    self.favoriteExcuseLabel = nil;
    self.favoriteSinLabel = nil;

}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)dealloc {
    [nameLabel release];
    [ageLabel release];
    [countryLabel release];
    [strikerUnitLabel release];
    [breastsLabel release];
    [favoriteTeaLabel release];
    [favoriteCandyLabel release];
    [favoriteGameLabel release];
    [favoriteExcuseLabel release];
    [favoriteSinLabel release];

    [super dealloc];
}

@end

1166

1)MainView.hのインポートについて

本書やサンプルコードではMain ViewとFlipside ViewそれぞれにViewクラスとViewControllerクラスがあるのですが、現在のUtility Applicationテンプレートでは自動生成されませんし、旧版の本書では触れておらず、新版のサンプルコードを見てもこれといった処理はしていないですし、無くても動きますので省略します。

2)ラベルのプロパティの実装

アウトレットである10個のラベルのプロパティを実装します。

3)refreshFieldsメソッドの実装

refreshFieldメソッドは、Settingsアプリケーションのデフォルトデータベースオブジェクトから設定値を取得し、10個あるメインビューのラベルの文字列として設定するメソッドです。

このメソッドは、viewDidAppear:viewDidLoad、flipsideViewControllerDidFinish:メソッドから呼び出されます。

まず最初にSettingsアプリケーションのデフォルトオブジェクトを、NSUserDefaultsクラスのstandardUserDefaultsメソッドで取得します。

取得したインスタンスdefaultsから、ヘッダファイルして設定したキー定数を使いobjectForKey:メソッドでオブジェクトを取得することができます。

戻り値のほとんどは(TypeがStringであるため)NSStringオブジェクトなので、ラベルのテキストにそのまま設定できます。

ただしスライダ要素のkBreastsKeyの戻り値は実数であるNSNumberオブジェクトになるため、stringValueメソッドで型を変換してラベルのテキストに設定しています。


standardUserDefaults

+ (NSUserDefaults *)standardUserDefaults

共有のデフォルトオブジェクトを返します。

共有のデフォルトオブジェクトがまだ存在しない場合は、以下のドメインの順序で名前を含むリストを検索して生成します。

NSArgumentDomainで、アプリケーションの引数から解析したデフォルトを構成
・アプリケーションのバンドル識別子でドメインを識別
NSGlobalDomainで、全てのアプリケーションで見られる意味からデフォルトを構成
・各ユーザの優先言語のための別ドメイン
NSRegistrationDomainで、一時的なデフォルトを設定し、アプリケーションによる検索が常に成功するように値を設定

デフォルトは現在のユーザ用に初期化されます。

標準検索リストの後続の変更は、このメソッドが再度呼び出されても残ります。

検索リストはこのメソッドが呼び出された初回のみ、標準で保証されます。

共有インスタンスは、allocとinitWithUser:またはinitを使ってカスタムインスタンスを容易に生成することができます。


objectForKey

- (id)objectForKey:(NSString *)defaultName

デフォルトの中で最初に発見した、指定したキーに対応するオブジェクトを返します。

指定したキーに対応するオブジェクトが無い場合はnilを返します。

このメソッドは検索リストの順でドメインを検索します。

元が可変オブジェクトの場合であっても、戻り値は固定オブジェクトになります。

defaultName:現在のユーザのデフォルトデータベースの中にあるキーを指定します。


stringValue

- (NSString *)stringValue

人が読める文字列として、レシーバの値を返します。

生成にはdescriptionWithLocale:のロケールをnilとして呼び出します。

4)initWithNibName:bundle:の実装

initWithNibName:bundle:メソッドは本書では太字で示されていないのですが、サンプルコードにもありますので実装します。

現在のUtility Applicationテンプレートでは自動生成されないので、UIViewController subclassのテンプレートからコピーして使用しています。
(旧版の本書の記述とテンプレートのものでは僅かに記述が異なりますが、内容は同じです)

5)viewDidAppear:の実装

viewDidAppear:はビューが表示された後で呼び出されるメソッドで、refreshFieldsの呼び出しを追加します。

後述のviewDidLoadと異なり、ビューが表示される度に呼び出されます。

initWithNibName:bundle:メソッドと同様に自動生成されないので、UIViewController subclassのテンプレートからコピーして使用しています。

本書やサンプルコードでは、スーパークラスによる初期化を最後にしていますが、ここでは最初に行っています。

6)viewDidLoadの実装

viewDidLoadはコメントアウトを解除します。

本書やサンプルコードではスーパークラスによる初期化が記述されていませんが、ここでは残しておき、その後にrefreshFieldsの呼び出しを追加します。

7)flipsideViewControllerDidFinish:について

flipsideViewControllerDidFinish:メソッドは、FlipsideViewController.hで宣言されているFlipsideViewControllerDelegateプロトコルのメソッドで、Utility Applicationテンプレートで自動生成されます。
(MainViewController.hでのFlipsideViewController.hのインポートと、FlipsideViewControllerDelegateプロトコルを採用しているのは、このメソッドのためです)

flipsideViewControllerDidFinish:メソッドでは、(モーダルビューである)フリップサイドビューを閉じてメインビューに戻るdismissModalViewControllerAnimated:メソッドを呼び出しており、このメソッドは親ビューコントローラが呼び出す必要があるため、MainViewController.mで実装しています。

また、refreshFieldsの呼び出しを追加します。


dismissModalViewControllerAnimated:

- (void)dismissModalViewControllerAnimated:(BOOL)animated

レシーバによって表示されたモーダルビューコントローラを閉じます。

親ビューコントローラは、presentModalViewController:animated:メソッドを使用して表示したモーダルビューコントローラを閉じる責任があります。

モーダルビューコントローラ自体がこのメソッドを呼び出しても、モーダルビューコントローラが自動的にこのメッセージを親ビューコントローラに転送します。

いくつかのモーダルビューコントローラを連続して表示する際に、モーダルビューコントローラのスタックを構築する場合、スタックの下位にあるビューコントローラがこのメソッドを呼び出すと、スタックにあるその子ビューコントローラ以上の全てのビューコントローラは閉じられます。

この場合、最上位のビューのみが閉じる際にアニメーションし、中間にある全てのビューコントローラは単純にスタックから削除されます。

モーダルトランジションスタイルを使用して最上位ビューを閉じる場合、スタックの下位にある他のビューコントローラで使用されているスタイルと異なる場合があります。

レシーバのモーダルビューコントローラへの参照を保持したい場合、このメソッドを呼び出す前にmodalViewControllerプロパティで値を取得してください。

animated:YESの場合、このメソッドはビューを閉じる際にアニメーションし、それ以外の場合はアニメーションしません。
アニメーションのスタイルは、閉じるビューコントローラのmodalTransitionStyleプロパティの値によって決定されます。

8)showInfo:の実装

showInfo:メソッドは、メインビューのインフォメーションボタンをタップした際に呼び出されるアクションメソッドで、Utility Applicationテンプレートで自動生成されます。

最初に(モーダルビューである)フリップサイドビューをinitWithNibName:bundle:メソッドで読み込んでインスタンスを生成し、デリゲートを設定します。

次にメインビューからフリップサイドビューへ移行する際のスタイルを、modalTransitionStyleプロパティで水平方向の回転(UIModalTransitionStyleFlipHorizontal)に設定します。

そしてpresentModalViewController:animated:メソッドで、フリップサイドビューを表示します。


modalTransitionStyle

@property(nonatomic, assign) UIModalTransitionStyle modalTransitionStyle

現在のビューコントローラをモーダルに表示する時のトランジション(遷移)スタイルです。

このプロパティは、現在のビューコントローラがpresentModalViewController:animated:メソッドを使用して表示された時の方法に作用します。

トランジションのタイプを変更する場合、ビューコントローラを表示する前にこのプロパティを設定する必要があります。

このプロパティのデフォルト値はUIModalTransitionStyleCoverVerticalです。

トランジションスタイルの有効なリストと、使用可能なプレゼンテーションスタイルとの互換性については、『UIModalTransitionStyle』を参照してください。


UIModalTransitionStyle

モーダルなビューコントローラを表示する際に利用できるトランジションスタイルです。

typedef enum {
    UIModalTransitionStyleCoverVertical = 0,
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;

UIModalTransitionStyleCoverVertical
ビューコントローラを表示する時、画面の下部から上にビューがスライドします。
閉じる時はビューが下にスライドして戻ります。
これはデフォルトのトランジションスタイルです。

UIModalTransitionStyleFlipHorizontal
ビューコントローラを表示する時、現在のビューが右から左に3Dで水平方向に回転を始め、その結果以前のビューの背面が新しいビューのように見えます。
閉じる時は左から右に回転し元のビューに戻ります。

UIModalTransitionStyleCrossDissolve
ビューコントローラを表示する時、現在のビューがフェードアウトすると同時に新しいビューがフェードインします。
閉じる時は同様なクロスフェードで元のビューに戻ります。

UIModalTransitionStylePartialCurl
ビューコントローラを表示する時、現在のビューのある角がカールアップし、その下にモーダルビューが表示されます。
閉じる時はモーダルビューの上にカールアップしたページが広がって戻ります。
このトランジションを使用して表示したモーダルビューは、それ自身にモーダルビューを追加表示することはできません。
このトランジションスタイルは、親ビューコントローラがフルスクリーンビューで表示されていて、UIModalPresentationFullScreenモーダルプレゼンティングスタイルを使用している場合のみサポートします。
異なる種類の要素を持つ親ビューや、異なるプレゼンテーションスタイルを使おうとすると例外が発生します。


presentModalViewController:animated:

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated

ユーザに指定されたビューコントローラによって管理されているモーダルビューを表示します。

iPhoneとiPod touchデバイスは、modalViewControllerのビューは常にフルスクリーンで表示されます。

iPadでは、modalPresentationStyleプロパティの値に依存して表示されます。

指定されたビューコントローラにmodalViewControllerプロパティを設定します。

そのビューをリサイズしビュー階層へ組み込みます。

ビューのアニメーションは、引数modalViewController内のmodalTransitionStyleプロパティで指定されたトランジションスタイルに従います。

modalViewController:モーダルビューを管理するビューコントローラを指定します。

animated:YESの場合、このメソッドはビューを表示する際にアニメーションし、それ以外の場合はアニメーションしません。

9)viewDidUnloadの実装

本書ではviewDidUnloadは記述されていませんが、サンプルコードのように10個のプロパティの所有権放棄を行います。

10)deallocの実装

deallocでは本書やサンプルコードと同じく、10個のプロパティの解放を行っています。


●実行

この段階で『ビルドと実行』を行うと、アプリケーションのメインビューは下図のような表示になります。

1167

項目Ageは、Settingsアプリケーションでの設定時には黒丸で表示が伏せられていますが、値は普通に取得して表示することができます。

1168

フリップサイドビューはこれから作るのでビューは空ですが、インフォメーションボタンでのビューの遷移、フリップサイドビューのDoneボタンの応答、ならびにデータ更新は機能しています。



参考文献

NSUserDefaults Class Reference

NSNumber Class Reference

UIViewController Class Reference

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

AppSettings(7)~MainViewController(2)

2011. 01. 29
●メインビューのnibファイルMainView.xibの編集

Resources下のMainView.xibをダブルクリックし、Interface Builderで開きます。

デフォルトのメインビューは、背景色がダークグレー、インフォメーションボタンがライトグレーになっています。

1155

1156

本書やサンプルコードの内容に合わせて背景色を白に、インフォメーションボタンをダークグレーに変更します。

背景色は、DocumentウィンドウでViewを選択し、InspectorウィンドウのAttributesタブでViewのBackgroundをWhite Colorに変更します。

1157

インフォメーションボタンは、DocumentウィンドウでLight Info Buttonを選択し、InspectorウィンドウのAttributesタブでButtonのTypeをInfo Darkに変更します。

1158

1159

1160

次にSettingsアプリケーションでの設定値を表示するため、ラベルを設置します。

各ラベルの位置とサイズは下表の通りです。

ラベル名X:Y:W:H:X:Y:W:H:
Name:607673181417315921
Age:62105711814110215921
Country:71134621814113115921
StrikerUnit:54163791814116015921
Breasts:46192871814118915921
Favorite Tea:45251881814124815921
Favorite Candy:262801071814127715921
Favorite Game:303091031814130615921
Favorite Excuse:203381131814133515921
Favorite Sin:47367861814136415921

固定ラベルの方はAttributesタブで、LabelのTextをそれぞれのラベル名に、LayoutのAlignmentを右寄せに、FontをHelvetica Bold,14.0に変更します。
(フォント変更時、(サイズをデフォルトの17.0のままで)先にBoldに変更するとHeightが21になってしまいますので、先にサイズを14.0にしてからBoldにするとHeightがずれません)

1161

設定値を表示する方のラベルの属性はデフォルトのままです。

1162

Documentウィンドウは下図のような状態になります。

1163

Viewウィンドウは下図のような状態になります。

1164

最後にアウトレットを接続します。

DocumentウィンドウでFile's Ownerを選択し、InspectorウィンドウのConnectionsタブを開き、10個のアウトレットを設定値を表示するラベルにそれぞれ接続します。

1165



参考文献

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

AppSettings(6)~MainViewController(1)

2011. 01. 28
Settingsアプリケーション用のSettings.bundleの設定が終わりましたので、アプリケーションからプリファレンスの設定値を読み込む処理に入ります。

●メインビューコントローラのヘッダファイルMainViewController.hの編集

プリファレンスの値をSettings.bundleから読み込み、メインビューに設定情報を表示するためのラベルと、ラベルに文字列を設定するメソッドrefreshFieldsを宣言します。
(太字が追加・修正した部分)

#import "FlipsideViewController.h"

#define kNameKey @"name"
#define kAgeKey @"age"
#define kCountryKey @"country"
#define kStrikerUnitKey @"strikerUnit"
#define kBreastsKey @"breasts"

#define kFavoriteTeaKey @"favoriteTea"
#define kFavoriteCandyKey @"favoriteCandy"
#define kFavoriteGameKey @"favoriteGame"
#define kFavoriteExcuseKey @"favoriteExcuse"
#define kFavoriteSinKey @"favoriteSin"


@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {
    IBOutlet UILabel *nameLabel;
    IBOutlet UILabel *ageLabel;
    IBOutlet UILabel *countryLabel;
    IBOutlet UILabel *strikerUnitLabel;
    IBOutlet UILabel *breastsLabel;

    IBOutlet UILabel *favoriteTeaLabel;
    IBOutlet UILabel *favoriteCandyLabel;
    IBOutlet UILabel *favoriteGameLabel;
    IBOutlet UILabel *favoriteExcuseLabel;
    IBOutlet UILabel *favoriteSinLabel;

}

@property (nonatomic, retain) UILabel *nameLabel;
@property (nonatomic, retain) UILabel *ageLabel;
@property (nonatomic, retain) UILabel *countryLabel;
@property (nonatomic, retain) UILabel *strikerUnitLabel;
@property (nonatomic, retain) UILabel *breastsLabel;

@property (nonatomic, retain) UILabel *favoriteTeaLabel;
@property (nonatomic, retain) UILabel *favoriteCandyLabel;
@property (nonatomic, retain) UILabel *favoriteGameLabel;
@property (nonatomic, retain) UILabel *favoriteExcuseLabel;
@property (nonatomic, retain) UILabel *favoriteSinLabel;

- (void)refreshFields;

- (IBAction)showInfo:(id)sender;

@end

1154

旧版の本書の内容と、現在のUitity Applicationテンプレートの内容が若干異なっており、MainViewController.hでの相違点は、

・インポートファイルがUIKit.hからFlipsideViewController.hに変更
・FlipsideViewControllerDelegateプロトコルの採用
・アクションメソッドshowInfo:の宣言

となっていますが、修正する必要は無いのでそのままにしておきます。

最初にプロパティリスト(Root.plistとMore.plist)から値を取り出すため、各アイテムに設定したキーを定数とします。

次に取得した値をメインビューに表示するため、アウトレットとしてラベルのプロパティを宣言します。

refreshFieldsは取得した値をラベルに設定するメソッドです。

アクションメソッドshowInfo:はテンプレートによって自動生成されるもので、メインビュー右下のインフォメーションボタンをタップした際に呼び出され、フリップサイドビューに切り替えるメソッドです。



参考文献

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

AppSettings(5)~Settings.bundle(3)

2011. 01. 27
5)Item 5:グループ要素の作成(2)

グループWitchとは別のグループとするため、グループ要素を作成します。

手順は『0)Item 0:グループ要素の作成』と同じです。

Item 4を一度畳み、その下にアイテムを追加し(Item 5)、Typeを『Dictionary』とします。

Item 5下にアイテムを追加し、Keyを『Type』、Valueを『PSGroupSpecifier』とします。

そしてアイテムをもう一つ追加し、Keyを『Title』、Valueを『Breasts』とします。

1140

『ビルドと実行』を行うと下図のようになります。

1141

グループWitchは区切られて、その下にグループBreastsが作成されます。

6)Item 6:スライダ要素の作成

スライダ要素は、行全体にスライダを設置し、ユーザに特定範囲内の連続値から任意の値(実数)を入力させる場合に用います。

ただ、スライダを移動させてもリアルタイムで具体的な数値を示すことはできないので、例えば1~100の範囲のスライダで72と選択させようというような目的には不向きです。

音量や画面輝度といった、範囲内の相対的な値を大体の感覚で調整させる用途になります。

Item 5を一度畳み、その下にアイテムを追加し(Item 6)、Typeを『Dictionary』とします。

スライダ要素とするためItem 6下にアイテムを追加し、Keyを『Type』、Valueを『PSSliderSpecifier』とします。

スライダの値を取得するためのキーはKeyを『Key』、Valueを『breasts』と設定します。

次にスライダのデフォルト値と、範囲の最小値/最大値を設定します。

Keyは『DefaultValue』『MinimumValue』『MaximumValue』とし、Typeを『Number』に変更、Valueはそれぞれ『80』『60』『100』と設定します。

最後にスライダの最小値と最大値の部分に画像を貼り付けます。

前述の通り、スライダ要素は具体的な数値を表すというより相対的な値をおおよそで示すので、どういうパラメータなのかをイメージし易い画像が良いでしょう。

ただ、スライダ要素用の画像は21x21ピクセルのPNGファイルとなっており、サイズが小さいために凝ったデザインにすることは難しいので、今回は本書にあるようにサンプルコードから流用します。

Settings.bundleで使用する画像は、これまでのように『プロジェクトのフォルダに画像ファイルを置く → XcodeのResourcesに画像ファイルを追加』というわけにはいきません。

バンドルとしてまとめられている、実質的にはフォルダの中に画像ファイルを入れなければなりません。

そこで自身のAppSettingsプロジェクトのフォルダにあるSettings.bundleを右クリックし、『パッケージの内容を表示』で中身にアクセスできるようにします。

1142

Apress社のサイト内のサンプルコードの『Beginning iPhone Development Projects Oct 12 2009/10 AppSettings』フォルダにある、turtle.png(最小値用)とrabbit.png(最大値用)の2つのファイルを先程開いたSettings.bundleにコピーします。

1143

XcodeのSettings.bundleにこの2つの画像を手動で追加することはできませんが、しなくても一度プロジェクトを閉じて開き直せば、追加したファイルがXcodeのツリーにも反映されます。

また今回の場合、アプリケーションのフリップサイドビューでもこのスライダを使用しますので、Resources下に2つの画像ファイルを追加しておきます。

そしてRoot.plistの編集に戻り、Item 6下にアイテムを2つ追加し、Keyを『MinimumValueImage』と『MaximumValueImage』、Valueを『turtle.png』と『rabbit.png』とします。

1144

『ビルドと実行』を行うと下図のようになります。

1145

Breastsグループとして、スライダ要素の行が追加されます。

7)Item 7:グループ要素の作成(3)

グループBreastsとは別のグループとするため、グループ要素を作成します。

手順は『5)Item 5:グループ要素の作成(2)』と同じです。

Item 6を一度畳み、その下にアイテムを追加し(Item 7)、Typeを『Dictionary』とします。

Item 7下にアイテムを追加し、Keyを『Type』、Valueを『PSGroupSpecifier』とします。

そしてアイテムをもう一つ追加し、Keyを『Title』、Valueを『Additional Info』とします。

1146

『ビルドと実行』を行うと下図のようになります。

1147

グループBreastsは区切られて、その下にグループAdditional Infoが作成されます。

8)Item 8:子ウィンドウ要素の作成

子ウィンドウ要素は、Settingsアプリケーション用に作成したプロパティリストを別途用意し、それを読み込むことでプリファレンスで階層的なページを構成することができます。

子ウィンドウ要素を設定した行の右側には、複数値要素と同様にディスクロージャインジケータが表示され、行をタップすると設定したプロパティリストが読み込まれ、ページが切り替わって表示されます。
(その子プロパティリストも階層構造にすることができます。)

今回は本書の説明通りにサンプルコードから子プロパティリストをコピーして使用します。

『6)Item 6:スライダ要素の作成』でのスライダ用の画像と同じく、Settings.bundleで利用する子プロパティリストファイルはバンドル内に置く必要があります。

子プロパティリストファイルのMore.plistは、サンプルコードの『Beginning iPhone Development Projects Oct 12 2009/10 AppSettings』フォルダ直下にはなく、Settings.bundle内にありますので、こちらも右クリックして『パッケージの内容を表示』でバンドルを開き、More.plistを自身のAppSettingsプロジェクトのSettings.bundle内にコピーします。

1148

スライダの時と同様に、XcodeのSettings.bundleにこの子プロパティリストを手動で追加することはできませんが、しなくても一通り子ウィンドウ要素の設定をして『ビルドと実行』を行い、一度プロジェクトを閉じて開き直せば、追加したファイルがXcodeのツリーにも反映されます。

Root.plistの編集に戻り、Item 7を一度畳んで、その下にアイテムを追加し(Item 8)、Typeを『Dictionary』とします。

子ウィンドウ要素とするため、Item 6下にアイテムを追加し、Keyを『Type』、Valueを『PSChildPaneSpecifier』とします。

子ウィンドウの内容を示す行のタイトルとして、Keyを『Title』、Valueを『More Settings』と設定します。

最後に子ウィンドウのプロパティリストファイルとして、Keyを『File』、Valueを『More』と設定します。
(拡張子.plistは不要です)

1149

『ビルドと実行』を行うと下図のようになります。

1150

Additional Infoグループに、More Settingsというディスクロージャインジケータを持つ行が追加されます。

行をタップすると、More.plistによる子ウィンドウに移行します。

1151

最初の4つはテキストフィールド要素で、最後の行は複数値要素となっていて階層構造を表すことができます。

1152

More.plistの内容は下図のようになっています。

1153



参考文献

Settings Application Schema Reference

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

AppSettings(4)~Settings.bundle(2)

2011. 01. 26
●PreferenceSpecifiersのアイテムの編集

今回設定するアイテムは9つあります。

Root(Dictionary)
   |
   ∟PreferenceSpecifiers(Array)
            |
            ∟Item 0:グループ要素(Dictionary)
            |
            ∟Item 1:テキストフィールド要素(Dictionary)
            |
            ∟Item 2:テキストフィールド要素(Dictionary)
            |
            ∟Item 3:複数値要素(Dictionary)
            |
            ∟Item 4:トグルスイッチ要素(Dictionary)
            |
            ∟Item 5:グループ要素(Dictionary)
            |
            ∟Item 6:スライダ要素(Dictionary)
            |
            ∟Item 7:グループ要素(Dictionary)
            |
            ∟Item 8:子ウィンドウ要素(Dictionary)

1122

旧版の本書では、自動生成される4つのアイテムの内1つ目のアイテムだけを残して3つを削除し、途中で1つ追加して、また1つ目の説明に戻ったり・・・と、現在のアイテム番号とのズレもあって分かり難いので、ここでは自動生成のアイテムは一旦全部削除して一から作成していこうと思います。

1123

0)Item 0:グループ要素の作成

Settingsアプリケーションはグループドテーブルで構成されており、グループ要素はプリファレンスの画面構成において、関連する要素ごとにグループ分けをするのに用いられます。

つまり作成するアプリケーションに対してデータを設定して受け渡す類のものではなく、視覚的に見易くするための区切りで、今回の場合は3つ使用します。

PreferenceSpecifiers下にアイテムを追加し(Item 0)、Typeを『Dictionary』とします。

Item 0をグループ要素とするには、Item 0下にアイテムを追加し、Keyを『Type』、Valueを『PSGroupSpecifier』とします。

以降、再度グループ要素のアイテムが設定されるまでが一つのグループとなります。

次に(必須ではありませんが)グループのタイトルを設定します。

Item 0下にアイテムをもう一つ追加し、Keyを『Title』、Valueを『Witch』とします。

1124

『ビルドと実行』を行うと下図のようになります。

1125

グループ下のアイテムが存在しないのでタイトル『Witch』のみが表示されます。

1)Item 1:テキストフィールド要素の作成

テキストフィールド要素は、プリファレンスでユーザに任意の文字列を入力させたい場合に使用します。

従ってアイテムのタイプだけでなく、文字列をアプリケーションに受け渡すためのキーが必須となります。

Item 0を一度畳み、その下にアイテムを追加し(Item 1)、Typeを『Dictionary』とします。

Item 1をテキストフィールド要素とするには、Item 1下にアイテムを追加し、Keyを『Type』、Valueを『PSTextFieldSpecifier』とします。

次に(必須ではありませんが)テキストフィールドのタイトルを設定します。

タイトルを設定しない場合、行の全幅がテキストフィールドとなります。

Item 1下にアイテムをもう一つ追加し、Keyを『Title』、Valueを『Name』とします。

そして入力された文字列を受け渡すためのキーを設定します。

Item 1下にアイテムを追加し、Keyを『Key』、Valueを『name』とします。

続いて(必須ではありませんが)テキスト入力の自動大文字化と自動校正の設定を行います。

自動大文字化は、テキスト入力時に文字を大文字にするかどうかを設定するもので、本書やサンプルコードでは何もしない『None』に設定しますが、名前の入力なのでここでは『Words』(単語の一文字目を大文字)にします。

Keyは『AutocapitalizationType』、Valueは『Words』とします。

自動校正はテキスト入力時の自動校正のスタイル(詳細は『UITextAutocorrectionType』)を決めるもので、ここでは何もしない『No』と設定します。

Keyは『AutocorrectionType』、Valueは『No』となります。

1126

『ビルドと実行』を行うと下図のようになります。

1127

グループWitchにテキストフィールドの項目Nameが追加されます。

行をタップするとテキストフィールドがアクティブになり、キーボードが現れて入力ができます。

1128

自動大文字化を『Words』と設定したので、未入力時とスペースを入れた後にShiftが有効になって大文字で入力されます。

キーボードは一度出現すると、右下のreturnキーやテキストフィールド外をタップしても片付けられません。

ナビゲーションバー左側の『Settings』ボタンで一度戻るとテキストフィールドのアクティブが解除され、AppSettingsに入り直した時にはキーボードは片付けられています。

2)Item 2:セキュリティを考慮したテキストフィールド要素の作成

パスワード入力など、テキスト入力時に入力した文字を伏字にするテキストフィールドを作成してみます。

Item 1を一度畳み、その下にアイテムを追加し(Item 2)、Typeを『Dictionary』とします。

テキストフィールド要素とするため、Item 2下にアイテムを追加し、Keyを『Type』、Valueを『PSTextFieldSpecifier』とします。

年齢を設定するものとして、タイトルはKeyを『Title』、Valueを『Age』、キーはKeyを『Key』、Valueを『age』とします。

(本書やサンプルコードと異なりますが)数字の入力なのでキーボードのタイプも追加してみます。

デフォルトのキーボードはアルファベット入力用の『Alphabet』ですが、今回は数字入力用とするため、Keyを『KeyboardType』、Valueを『NumberPad』とします。

自動大文字化は不要なので、Keyは『AutocapitalizationType』、Valueは『None』とします。

自動校正も同様で、Keyは『AutocorrectionType』、Valueは『No』となります。

最後に入力されたテキストを伏字(●)にするため、Keyを『IsSecure』、Valueを『YES』とします。
(デフォルトで『IsSecure』は『NO』になっています)

1129

『ビルドと実行』を行うと下図のようになります。

1130

グループWitchにテキストフィールドAgeが追加されます。

1131

テキストフィールドをタップするとテンキーが表示され、入力した文字は次の文字が入力されるか、入力して2秒程で『●』に変化します。

3)Item 3:複数値要素の作成

複数値要素は、ユーザに複数の値から値を一つ選択させたい場合に用います。

複数値要素の行の右端にはディスクロージャインジケータ(グレーの『>』)が表示され、行をタップすると別ページを開き、複数の選択肢リストが表示されます。

選択肢のリストでは、デフォルトの選択値にチェックが入っており、別の項目を選択すると元の項目のチェックが外れるラジオボタンのような択一の動作になります。

選択し終えたらナビゲーションバー左側にある『AppSettings』ボタンをタップすると前のページに戻り、選択された項目が行に反映されます。

複数値要素には6つのキーがありますが、全て必須となっています。

Item 2を一度畳み、その下にアイテムを追加し(Item 3)、Typeを『Dictionary』とします。

複数値要素とするため、Item 3下にアイテムを追加し、Keyを『Type』、Valueを『PSMultiValueSpecifier』とします。

タイトルは選択肢リストの内容を示すもので、今回は所属国を選択するものとして、Keyを『Title』、Valueを『Country』とし、値を取得するためのキーはKeyを『Key』、Valueを『country』とします。

選択肢リストは、画面に表示する項目を示す配列『Titles』と、その項目に一対一で対応するキーの配列『Values』で構成されます。

Keyは『Titles』と『Values』として作成し、Typeは『Array』に変更します。

そしてそれぞれの下にStringアイテムを同数作り、キーを対応させるため順序を対応させます。

最後に選択肢のリスト配列Valuesの中からデフォルト値として一つ選び、keyを『DefaultValue』、Valueをデフォルト値に設定します。

1132

『ビルドと実行』を行うと下図のようになります。

1133

グループWitchに複数値要素の行Countryが追加されます。

行の右側には設定したデフォルト値とディスクロージャインジケータが表示されます。

『DefaultValue』で設定する値はキー配列『Values』で設定している値で、表示されるのは『Values』に対応している配列『Titles』の値になることに注意してください。

行を選択すると選択肢リストの画面に移行します。

デフォルト値で設定されている行の右側にはチェックマークが入っています。

1134

選択方法は択一なので、他の行を選択すると前の選択行のチェックマークは外れます。

1135

ナビゲーションバー左側の『AppSettings』ボタンをタップすると前の画面に戻り、選択した項目が複数値要素の行に反映されます。

1136


4)Item 4:トグルスイッチ要素の作成

トグルスイッチ要素は、行にON/OFFを切り替えるボタンを設置し、ユーザに選択させる場合に用います。

スイッチがONの場合はYES、OFFの場合はNOというブール値が得られますが、オプションでそれぞれに値を設定することもできます。

Item 3を一度畳み、その下にアイテムを追加し(Item 4)、Typeを『Dictionary』とします。

トグルスイッチ要素とするため、Item 4下にアイテムを追加し、Keyを『Type』、Valueを『PSToggleSwitchSpecifier』とします。

タイトルはスイッチの内容を示すもので、今回は装備状態を選択するものとして、Keyを『Title』、Valueを『StrikerUnit』とし、値を取得するためのキーはKeyを『Key』、Valueを『strikerUnit』と設定します。

装備/非装備を表すため、スイッチのON/OFFそれぞれに文字列を設定します。

スイッチON時はKeyを『TrueValue』、Valueを『Equipped』とし、OFF時はKeyを『FalseValue』、Valueを『Released』とします。

最後にスイッチのデフォルト状態として、keyを『DefaultValue』、Valueを『Equipped』にします。

1137

『ビルドと実行』を行うと下図のようになります。

1138

グループWitchにスイッチの行StrikerUnitが追加されます。

1139

この画面ではスイッチのON/OFF状態が変更できますが、文字列が設定されているかどうかは分かりません。



参考文献

Settings Application Schema Reference

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

AppSettings(3)~Settings.bundle(1)

2011. 01. 25
私達が作成するアプリケーションのプリファレンスをSettings(設定)アプリケーションに組み込むには、アプリケーション内にSettings.bundleというバンドルを追加します。

Settings.bundleは、プリファレンスの内容を表すプロパティリストとローカライズ用のファイル、表示に用いる画像ファイルなどを格納したバンドルです。


●Settings.bundleの追加

Xcodeで『グループとファイル』の一番上にあるルートオブジェクト『AppSettings』を右クリックして、『追加』→『新規ファイル...』を選択してテンプレートのウィンドウを開きます。

左ペインのiOS欄にある『Resources』(旧版の本書では『Settings』となっていますが、現在は『Resources』になっています)を選択し、右上ペインの中から『Settings Bundle』を選択して『次へ』ボタンをクリックします。

1113

ファイル名は『Settings.bundle』のままで『完了』ボタンをクリックし、生成します。

1114

Settings.bundleにはSettingsアプリケーションに表示する内容を記述するプロパティリストRoot.plistと、ローカライズディレクトリen.lprojが自動生成されますが、今回はローカライズしないのでen.lprojは無視してください。


●Settingsアプリケーションに反映されない場合の対処法

プロジェクトにSettings.bundleを追加して『ビルドと実行』を行っても、Settingsアプリケーションに反映されない場合があります。

1118

このように後から追加したリソースが適用されない場合、『ターゲット』→『AppSettings』→『バンドルリソースをコピー』を見てください。

1116

この時点では『バンドルリソースをコピー』に後から追加したSettings.bundleが含まれておらず、ビルド内容に反映されない状態なので、ここにSettings.bundleごとドラッグ&ドロップで追加します。

1117

すると『ビルドと実行』を行うとSettingsアプリケーションに反映されるようになります。

1119

何かを調べていた時に知った対処療法なので、理由についてきちんと説明することはできません。

またこれには逆のケースもあり、『AppSettings』下のSettings.bundleを削除しても、『ターゲット』の『バンドルリソースをコピー』下にSettings.bundleが残っている場合、消したはずなのにSettingsアプリケーションには出るという現象が発生します。

その場合は、Xcodeの『ビルド』メニューにある『すべてのターゲットをクリーニング』を行ってください。

それと自身のAppSettingプロジェクトとサンプルコードの同名プロジェクトを、交互にシミュレータで試している内にプロパティリストの挙動が怪しくなった場合は、『iOSシミュレータ』の『コンテンツと設定をリセット』を試してください。


●自動生成されたRoot.plistの内容

自動生成されたRoot.plistの内容と旧版の本書の内容と異なる部分があるので、補足も含めて説明します。

項目の説明において、注釈無しに『アプリケーション・スキーマの設定Settings Application Schema Reference)』から引用している部分がありますので、詳細についてはそちらを参照してください。

1115

1)Title

旧版の本書にはRoot直下にTitleという項目があり、初期状態では『YOUR_PROJECT_NAME』となっているようですが、現在自動生成されるRoot.plistのRoot直下にはTitleという項目はありません。

『アプリケーションのルート設定画面の場合、タイトル文字列はアプリケーション名そのものになります』とあるので、現在はアプリケーション名で固定になっているようです。
(試しにRoot直下にTitleを追加して設定してみましたが変化はありませんでした)

2)StringsTable

StringsTableは『このファイルに関連付けられた文字列ファイルの名前』とあり、Root.plistの内容をローカライズする際のファイル名を指定するもので、Settings.bundleのローカライズフォルダ『en.lproj』内にあるファイルRoot.stringsを指しています。

今回はローカライズを行いませんので、無視して構いません。

3)PreferenceSpecifiers

SettingsアプリケーションのAppSettingsをタップすると表示される、プリファレンスの内容を設定する配列です。

配列の要素は各項目を表す辞書となっており、自動生成では4つの項目があります。

旧版の本書では項目がItem 1~Item 4と説明されていますが、現在自動生成される項目はItem 0~Item 3となっており、以降の説明に関しても番号が一つずれることになっていますので注意してください。

アイテムの番号は自動で割り振られるため、番号をItem 1から始めることはできませんので、ここではItem 0から始まる番号で説明していきます。



参考文献

Settings Application Schema Reference

iOS Application Programming Guide

iOSアプリケーションプログラミングガイド

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

アプリケーション・スキーマの設定

2011. 01. 24
●はじめに

iPhoneアプリケーションのプリファレンスは、Settings(設定)システムアプリケーションによって表示されます。

Settingsアプリケーションに必要な情報は、貴方が表示したいものとユーザが変更可能なプリファレンスをsettingsバンドルとして作成し、アプリケーションのバンドルディレクトリに組み込みます。

その後、アプリケーションが実行時に取得できるように、デフォルトデータベース内に設定値を保存します。

このドキュメントは、settingsバンドル内に含めるスキーマファイルを構成する要素について説明します。

全てのバンドルはルートコンテンツを持っている必要があります。

その他に含まれる要素は、貴方が必要とし、表示する予定のプリファレンスに基づきます。

settingsバンドルの生成についての情報は、『iOS Application Programming GuideiOSアプリケーションプログラミングガイド)』を参照してください。


●スキーマファイルのルートコンテンツ

各個の設定画面はプロパティリストファイルによって表されます。

最小限として、Settingsバンドルは少なくとも一つのRoot.plistファイルによって表されるルート画面を持つ必要があります。

子ウィンドウ要素を使用して画面を追加する場合、各個の画面はそれぞれに関連付けされたプロパティリストファイルを持つ必要があります。

各ファイルのルートレベルで表示することができるキーのリストを表1に示します。

表1 プリファレンス・スキーマのルートレベルのキー
キータイプ
PreferenceSpecifiers
(必須) 
Array このキーの値は辞書の配列で、各辞書は一つのプリファレンス要素のた
めの情報を含みます。
これらのキーは、貴方がプリファレンスのページ上で表示したい要素を
記述する必要があります。 
StringsTableStringこのスキーマファイルに関連付けされた文字列ファイルの名前です。
この(適切にローカライズされた文字列の)ファイルのコピーは貴方の
バンドルの言語指定プロジェクトディレクトリにある必要があります。
文字列ファイルの作成についての情報は、『Internationalization Program
ming Topics
』を参照してください。 

各設定画面の上部に表示されるタイトル文字列は、外部ソースに由来しています。

アプリケーションのルート設定画面の場合、タイトル文字列はアプリケーション名そのものになります。

子の設定画面では、タイトルは子ウィンドウ要素のTitleキーから取得して画面の表示に使用します。

このキーについての詳細は『子ウィンドウ要素』を参照してください。

PreferenceSpecifiersキー内の各辞書は、プリファレンス要素に関連付けされたキーを含みます。

サポートする要素のタイプを表2に示します。

表2 PreferenceSpecifiersキーに含まれる要素のタイプ
要素のタイプ説明
PSTextFieldSpecifierテキストフィールドのプリファレンスです。
この要素は編集可能なテキストフィールドとオプションでタイトルを表示
します。
ユーザにカスタムの文字列値を要求する場合、プリファレンスにこのタイ
プを使用することができます。
詳細は『テキストフィールド要素』を参照してください。 
PSTitleValueSpecifier読み込み専用文字列のプリファレンスです。
フォーマットされた文字列として、値をプリファレンスに表示する場合に
この値を使用することができます。
詳細は『タイトル要素』を参照してください。 
PSToggleSwitchSpecifierトグルスイッチのプリファレンスです。
2つの値の内の1つの値を選択するプリファレンスを構成する場合に、この
値を使用することができます。
一般的にこの値はブール値を含むプリファレンスを表すのに使用されます
が、プリファレンスにブール値以外を含めることもできます。
詳細は『トグルスイッチ要素』を参照してください。 
PSSliderSpecifierスライダのプリファレンスです。
値の範囲を表すプリファレンスに、この値を使用することができます。
このタイプの値は、指定した最小値と最大値の実数を表します。
詳細は『スライダ要素』を参照してください。 
PSMultiValueSpecifier複数値のプリファレンスです。
相互に排他的な設定をサポートするプリファレンスに、この値を使用する
ことができます。
詳細は『複数値要素』を参照してください。 
PSGroupSpecifierグループアイテムのプリファレンスです。
グループタイプは、1つのページ上にあるプリファレンスのグループを分
類するための方法です。
グループタイプはプリファレンスの構成を表すものではありません。
詳細は『グループ要素』を参照してください。 
PSChildPaneSpecifier子ウィンドウのプリファレンスです。
プリファレンスの新しいページにリンクする場合に、この値を使用するこ
とができます。
詳細は『子ウィンドウ要素』を参照してください。 


グループ要素(Group Element)

PSGroupSpecifierタイプに関連付けされた辞書内に置くことができるキーを表3に示します。

このタイプはグループ要素を定義し、ページ上のプリファレンスを視覚的にグループ分けする方法です。

この要素は、グループに関連付けされたプリファレンスの前に配置する必要があります。

グループのタイトルを割り当てたり、キーを省略してプリファレンスの間にギャップを表示することができます。

表3 PSGroupSpecifier辞書のキー
キー値のタイプ
Type
(必須)
Stringこのキーの値は常にPSGroupSpecifierに設定します。
このキーは必須です。
Title
(ローカライズ可)
Stringグループのタイトルです。
このキーが指定されていない場合、プリファレンスの間には代わ
りにギャップが入ります。
このキーの値はローカライズできます。 
FooterText
(ローカライズ可)
Stringグループボックスの下に表示する追加テキストです。
提供するフッタはオプションです。
このキーの値はローカライズできます。
このキーはiOS 4.0以降で利用できます。 


子ウィンドウ要素(Child Pane Element)

PSChildPaneSpecifierタイプに関連付けされた辞書内に置くことができるキーを表4に示します。

この要素はプリファレンスの行に表示され、タップされた時にプリファレンスの新しいページが読み込まれます。

プリファレンスの階層的なページを構成する場合に、この要素のタイプを使用することができます。

表4 PSChildPaneSpecifier辞書のキー
キータイプ
Type
(必須)
Stringこのキーの値は常にPSChildPaneSpecifierに設定します。
このキーは必須です。
Title
(必須、
ローカライズ可)
Stringプリファレンスの行に表示するタイトルの文字列です。
この文字列をユーザがタップすると次のページが表示されます。
またこの文字列はこの後で表示される画面のタイトルとして使用されま
す。
このキーは必須です。
このキーの値はローカライズできます。
File
(必須)
String読み込むスキーマファイルの名前です。
(このファイルはプロパティリストファイルである必要があります)
このキーで指定する文字列は、パス情報や、スキーマファイル名の拡張
子.plistを含める必要はありません。
Settingsアプリケーションは、指定した名前の.plistファイルをsettingsバン
ドルの最上位レベルから検索します。
例えばMyPrefs.plistファイルを指定する場合、このキーの値にはMyPrefs
を割り当てます。
このキーは必須です。


トグルスイッチ要素(Toggle Switch Element)

PSToggleSwitchSpecifierタイプに関連付けされた辞書内に置くことができるキーを表5に示します。

この要素はユーザが切り替えることができるON/OFFボタンを表示します。

表5 PSToggleSwitchSpecifier辞書のキー
キー値のタイプ
Type
(必須)
Stringこのキーの値は常にPSToggleSwitchSpecifierに設定します。
このキーは必須です。
Title
(必須、
ローカライズ可)
Stringスイッチの左側に表示する文字列です。
このキーは必須です。
このキーの値はローカライズできます。
Key
(必須)
String値を識別するプリファレンスのキーです。
この文字列は、デフォルトデータベースからプリファレンスの値を
取得するために使用します。
このキーは必須です。
DefaultValue
(必須)
Anyプリファレンスのキーのデフォルト値です。
この値は、(Keyで登録されている)指定したプリファレンスの
キーがデフォルトデータベース内に存在しない場合に返されます。
このキーは必須です。
TrueValueAnyトグルスイッチがONの位置にある場合に関連付けされている値で
す。
このキーの値の型には、ブール値、文字列、数値、日付、データを
含むスカラー型を指定できます。
このキーが指定されていない場合、デフォルト値はブール型のYES
になります。
FalseValueAnyトグルスイッチがOFFの位置にある場合に関連付けされている値で
す。
このキーの値の型には、ブール値、文字列、数値、日付、データを
含むスカラー型を指定できます。
このキーが指定されていない場合、デフォルト値はブール型のNO
になります。


スライダ要素(Slider Element)

PSSliderSpecifierタイプに関連付けされた辞書内に置くことができるキーを表6に示します。

この要素はユーザが連続した範囲の値を指定するのに使用することができるスライダを表示します。

表6 PSSliderSpecifier辞書のキー
キー値のタイプ
Type
(必須)
Stringこのキーの値は常にPSSliderSpecifierに設定します。
このキーは必須です。
Key
(必須)
String値を識別するプリファレンスのキーです。
この文字列は、デフォルトデータベースからプリファレンスの値
を取得するために使用します。
このキーは必須です。
DefaultValue
(必須)
Realプリファレンスのキーのデフォルト値です。
この値は(Keyで登録されている)指定したプリファレンスの
キーがデフォルトデータベースに存在しない場合に返されます。
このキーは必須です。
MinimumValue
(必須)
Realスライダの最小値です。
このキーは必須です。
MaximumValue
(必須)
Realスライダの最大値です。
このキーは必須です。
MinimumValueImageStringスライダの最小値側に表示する画像です。
この画像は21x21ピクセルにする必要があります。
MaximumValueImageStringスライダの最大値側に表示する画像です。
この画像は21x21ピクセルにする必要があります。


タイトル要素(Title Element)

PSTitleValueSpecifierタイプに関連付けされた辞書内に置くことができるキーを表7に示します。

この要素は読み込み専用のプリファレンスを表します。

アプリケーションの構成に関する情報をユーザに提供するために使用することができます。

表7 PSTitleValueSpecifier辞書のキー
キー値のタイプ説明
Type
(必須)
Stringこのキーの値は常にPSTitleValueSpecifierに設定します。
このキーは必須です。
Title
(ローカライズ可)
Stringこの文字列は値の左側に表示されます。
このキーの値はローカライズできます。 
Key
(必須)
String値を識別するプリファレンスのキーです。
この文字列は、デフォルトデータベースからプリファレンスの値
を取得するために使用します。
このキーは必須です。
DefaultValue
(必須)
Stringプリファレンスのキーのデフォルト値です。
この値は、(Keyで登録されている)指定したプリファレンスの
キーがデフォルトデータベースに存在しない場合に返されます。
このキーは必須です。
ValuesArrayデフォルトデータベース内の(Keyで登録されている)プリファ
レンスのキーに関連付けされた値の配列です。
これらの値は任意の型を指定できます。
各値はTitles配列に対応する値である必要があります。
Titles
(ローカライズ可)
ArrayValues配列内のユーザが読み取れるバージョンの値を表す文字列
の配列です。
この配列の値はローカライズできます。

デフォルトデータベースの値を不可解に思う人のために、人が読める形式の文字列としてValuesとTitlesキーを関連付けすることができます。

双方の配列の登録数は同じにする必要があります。

指定されたインデックスの値がプリファレンスのキーに関連付けされている場合、Titles配列の同じインデックスの文字列はSettingsアプリケーションによってプリファレンスに表示されます。


テキストフィールド要素(Text Field Element)

PSTextFieldSpecifierタイプに関連付けされた辞書内に置くことができるキーを表8に示します。

表8 PSTextFieldSpecifier辞書のキー
キー値のタイプ
Type
(必須)
Stringこのキーの値は常にPSTextFieldSpecifierに設定します。
このキーは必須です。
Title
(ローカライズ可)
Stringテキストフィールドの値の左側に表示する文字列です。
この文字列は左揃えの太字で描画されます。
このキーを省略した場合、行の全幅が編集可能なテキストフィ
ールドになります。
この値はローカライズできます。 
Key
(必須)
String値に関連付けするプリファレンスのキーです。
これはコードでプリファレンスの値を取得する際に使用する文
字列です。
このキーは必須です。
DefaultValueStringプリファレンスのキーのデフォルト値です。
この値は(Keyで登録されている)指定したプリファレンスの
キーがデフォルトデータベース内に存在しない場合に返されま
す。
このキーが存在しない場合、空の文字列がキーに関連付けされ
ます。
IsSecureBooleanYESの場合、テキストフィールドはパスワード登録のテキスト
フィールドになり、入力したテキストが黒丸に置き換えられま
す。
NOの場合、テキストフィールドは標準のテキストフィールド
になり、入力したテキストはそのまま表示されます。
このキーが存在しない場合デフォルト値はNOになります。 
KeyboardTypeStringユーザに表示するキーボードのタイプです。
この値はAlphabet、NumbersAndPunctuation、NumberPad、URL、
EmailAddressのいずれかの文字列を含む必要があります。
このキーが存在しない場合デフォルト値はAlphabetになります。
AutocapitalizationTypeStringテキスト入力に自動大文字化スタイルを適用します。
この値はNone、Sentences、Words、AllCharactersのいずれかの
文字列を含む必要があります。
このキーが存在しない場合、デフォルト値はNoneになります。
AutocorrectionTypeStringテキスト入力に自動校正スタイルを適用します。
この値は、Default、No、Yesのいずれかの文字列を含む必要が
あります。
このキーが存在しない場合デフォルト値はDefaultになります。

テキストフィールドで使用する、オプションのキーボードや自動大文字化、自動校正についての詳細は、UITextInputTraitsプロトコルで定義されている定数を参照してください。


複数値要素(Multi Value Element)

PSMultiValueSpecifierタイプに関連付けされた辞書内に置くことができるキーを表9に示します。

複数値要素を含むプリファレンスをユーザがタップすると、Settingsアプリケーションは値を選択することができる新しいページを表示します。

値を選択すると、ユーザは前のページに戻り、選択した値がプリファレンスの行に表示されます。

表9 PSMultiValueSpecifier辞書のキー
キー値のタイプ説明
Type
(必須)
Stringこのキーの値は常にPSTextFieldSpecifierに設定します。
このキーは必須です。
Title
(必須、
ローカライズ可)
Stringプリファレンスを識別するユーザが読み取れる文字列です。
このキーは必須です。
この値はローカライズできます。
Key
(必須)
String値に関連付けするプリファレンスのキーです。
これはコードでプリファレンスの値を取得する際に使用する文字列
です。
このキーは必須です。
DefaultValue
(必須)
Anyプリファレンスのキーのデフォルト値です。
この値は、(Keyで登録されている)指定したプリファレンスの
キーがデフォルトデータベース内に存在しない場合に返されます。
このキーは必須です。 
Values
(必須)
Arrayデフォルトデータベース内の(Keyで登録されている)プリファレ
ンスのキーに関連付けされた値の配列です。
これらの値は任意の型を指定できます。
各値はTitles配列に対応する値である必要があります。
Titles
(必須)
ArrayValues配列内のユーザが読み取れるバージョンの値を表す文字列の
配列です。
これらは選択ページ上に実際に表示される文字列です。
文字列が選択されると、インデックスに一致した値がデフォルト
データベースに格納されます。
この配列の値はローカライズできます。

デフォルトデータベースの値を不可解に思う人のために、人が読める形式の文字列としてValuesとTitlesキーを関連付けすることができます。

双方の配列の登録数は同じにする必要があります。

指定されたインデックスの値がプリファレンスのキーに関連付けされている場合、Titles配列の同じインデックスの文字列はSettingsアプリケーションによってプリファレンスに表示されます。



参考文献

Settings Application Schema Reference

IT用語辞典/スキーマとは

0 CommentsPosted in 資料

AppSettings(2)~プロジェクトの作成

2011. 01. 23
●プロジェクトの作成

今回のアプリケーションは、Settings(設定)アプリケーションのプリファレンスとデータをやり取りするのが目的ですので、単純なUtility Applicationテンプレートを使用します。

1106

このテンプレートは標準アプリケーションのWeather(天気)アプリケーションのような、メインとなるビューと設定を行うフリップサイド(裏側)ビューの2つのビューを持ちます。

1108

メインビューの右下にはインフォメーションボタンがあり、タップすると右から左へ回転して裏側のフリップサイドビューが表示されます。

1109

ナビゲーションバー左側のDoneボタンをタップすると逆方向に回転し、メインビューに戻ります。

Utility Applicationテンプレートでファイル名を『AppSettings』としてプロジェクトを作成します。

1107

Utility ApplicationテンプレートはこれまでのView-based Applicationテンプレートと異なり、左ペインの『グループとファイル』を見ると『Classes』フォルダがありません。

代わりに『Main View』と『Flipside View』、『Application Delegate』というフォルダがあり、それぞれメインビュー、フリップサイドビュー、アプリケーションのコントローラと機能毎にフォルダが分かれています。

旧版の本書やApress社のサイト内のサンプルコードではビューとビューコントローラが存在していますが、現在の環境(Xcode 3.2.5、iOS SDK 4.2)ではビューのファイルは自動生成されません。

本書でも触れられていなく、サンプルコードでも特に何か処理を行っているようではないので、追加せずに進めます。


●アプリケーションウィンドウのnibファイルMainWindow.xibについて

旧版の本書ではアプリケーションのウィンドウであるMainWindow.xibを開き、インフォメーションボタンLight Info Buttonの色を変更するとありますが、インフォメーションボタンがあるのはメインビューのnibファイルであるMainView.xibですので、後でMainView.xibを編集する際にまとめて行います。
(今回MainWindow.xibを編集することはありません)


●アプリケーションアイコンの追加

本書ではアプリケーションアイコンとなるファイルIcon.pngを、サンプルコードからコピーして使用するように書かれています。
(Beginning iPhone Development Projects Oct 12 2009/10 AppSettings/icon.png)

Icon.pngはApp StoreならびにiPhone/iPod touchのホームスクリーンで表示されるアプリケーションのアイコン名となっており、(実際には)Resourcesに追加するだけで設定されます。
(画像サイズは57x57ピクセルです)

1111

1110

本来はアプリケーションのバンドル情報を記述するプロパティリストInfo.plistを開き、手動で修正する必要があります。

1112

Info.plistの『Icon file』で設定するファイルには、他にもiPhone 4の高解像度(114x114ピクセル)、iPadのホームスクリーンとの兼用(72x72ピクセル)などがありますので、詳細はApple公式サイトの『Q&A QA1686 iPadとiPhoneのアプリアイコン』を参照してください。

そこには、SpotlightとSettingsで使用されるアイコンはIcon-Small.png(29x29ピクセル)という名前で設定するようになっていますが、今回は設定せずにシステムの自動拡大/縮小に任せています。

システムの自動拡大/縮小に任せた場合、元画像から拡大すると粗が目立ちますし、縮小すると潰れて判別し難くなるので、リリースする際には全種揃えて設定した方が良いと思われます。

理論的にはそれぞれ別のデザインの画像を設定することも可能ですが、ユーザを混乱させる元なので避けるべきでしょう。
(全く異なるデザインだと審査で弾かれる可能性があります)



参考文献

Technical Q&A QA1686 App Icons on iPad and iPhone

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

AppSettings(1)~概要

2011. 01. 22
今回はiOSデバイスにデフォルトで組み込まれているSettings(設定)アプリケーションに、私達の作成するアプリケーションの設定(プリファレンス)項目を追加し、アプリケーションによるプリファレンスから設定の読み込みと書き込みについて学びます。


●AppSttingsアプリケーションの概要

iOSデバイスには、デバイス全体の環境設定を行うアプリケーション『Settings(日本語環境では『設定』)』アプリケーションがデフォルトで組み込まれています。
(下図はiOSシミュレータでのホーム画面)

1099

Settingsアプリケーションでは、一般的なデバイスの環境設定だけでなく、一部アプリケーションの設定も行うことができます。

1100

ここにはiOSがデフォルトで組み込んでいるアプリケーション以外に、私達の作成したアプリケーションの設定を組み込むことができます。

1101

今回作成するAppSettingsアプリケーションでは、テキストフィールドで入力した文字列や、サブビューで選択した値、スイッチによるON/OFF値、スライダによる連続値などを設定として保持します。

1102

これらSettingsアプリケーションで行った設定を、AppSettingアプリケーションから読み込んで反映させます。

1105

またAppSettingsアプリケーションで一部の項目(スイッチとスライダ)を設定することができます。

1104

この設定はAppSettingsアプリケーションだけでなく、Settingsアプリケーションにも反映され、AppSettingsアプリケーションを終了しても保持されます。

ユーザアプリケーションの設定を簡単に保持できる方法なのですが、その設定を行うにはユーザアプリケーションを終了ないし切り替えてSettingsアプリケーションを立ち上げる必要があること、また基本的にユーザアプリケーションは相互にデータをやり取りすることが少なく独立性が高いことから、ユーザの使い勝手を考えると安易にSettingsアプリケーションに設定を保持することは推奨されていません。

Settingsアプリケーションにユーザアプリケーションの設定を置くとユーザが気付き難いですし、設定を変更する頻度が高いものはアプリケーション内で行えるようにすべきだと個人的に思います。

ともあれ、Settingsアプリケーションに設定を保存する方法は覚えておく必要があるので、その方法を勉強していきます。



参考文献

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る






Bose SoundLink around-ear wireless headphones II
Calendar
12 | 2011/01 | 02
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
Profile

水月杏香

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

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose SoundLink around-ear wireless headphones II
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
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR