iOS アプリ開発はじめました (1)

まったく個人的なメモ。

登録など

まずは公式のドキュメント

日本語ドキュメント - Apple Developer

  • iOS ヒューマンインターフェイス ガイドライン (2014/03/10 更新)
    • アプリの外部設計に関すること、iOS の機能をどう活かすべきについて書かれている
    • 「起動画像」はいろいろなアプリを実際に観察してみてなるほどと思った
  • iOS アプリケーション プログラミングガイド (2013/10/23 更新)
    • アプリの内部設計の解説
  • iOS View Controller プログラミングガイド (2012/12/13 更新)
  • iOS View Controller カタログ (2012/02/16 更新)
    • フレームワークで提供されている View Controller を知っておけば、自分で作るよりも早く簡単に品質の高いアプリを作れる

Storyboard を使って UI を設計する

Storyboard の一般的な使い方についてはこちら

カスタムビューの設定方法はこちら

カスタムビューを初期化する

UIView を継承したクラスを作ると、 Xcode により initWithFrame というメソッドのコードが自動生成される。
しかしながら Storyboard を使って View クラスを設定すると initWithFrame が呼ばれない。代わりに initWithCoder のほうが呼ばれる。

書き方は initWithFrame と同じ。

- (id) initWithCoder: (NSCoder*)coder
{
	self = [super initWithCoder: coder];
	if (self) {
		// 初期化コード
	}
	return self;
}

Objective-C について

Objective-C では、オブジェクトはすべて参照型であり、宣言するときはポインタとして宣言する。

NSString *str = @"すずめかわいい";

あらゆるオブジェクトを格納できる id 型というものもある。C における void * 型を id 型として定義したようなもの。当然オブジェクトとして使用するときは個々の型に変換する必要がある。

id obj = @"すずめかわいい";

NSString *str = (NSString *)obj;
[str ...]; // 使う

Objective-C で文字列を扱うときにたびたび出てくる @ は、文字列を NSString として初期化するための書き方。最近では NSNumber や NSArray, NSDictionary についてもこのような書き方が用意されている。

Delegate の書き方

Suzume.h

...
// デリゲートの定義
@protocol SuzumeDelegate <NSObject>

// 依頼したい内容を書く
- (void) okometabetai: (Chawan *)ochawan;

// 実装してもしなくてもよい機能を書く
@optional
- (void) osushitabetai: (Sara *)osara;

@end


@interface Suzume : NSObject
// デリゲートの宣言。プロパティ delegate としてアクセスする
@property (nonatomic, assign) id<SuzumeDelegate> delegate;
...
@end

Suzume.m

- (void)someMethod
{
	// 必ず定義されている
	[_delegate okometabetai: ochawan];

	// @optional を指定しているので、メソッドが存在するかどうか調べている
	if ([_delegate respondsToSelector: @selector(osushitabetai:)]) {
		[_delegate osushitabetai: osara];
	}
}

プロパティの頭に _ を付ける (_delegate のように) と、直接プロパティの操作ができる。self.prop のようにすると getter/setter が呼ばれる、とのこと。