nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

iOSアプリ開発チュートリアルメモ

ナビゲーションコントローラの追加

  • タイトル表示や戻るなどが出来るようになる
  • 追加したいビューコントローラを選択した状態で、メニューから Editor > Embed In > Navigation Controller

カスタムコントローラの追加

  • File > New > File
  • iOS > Source > Cocoa Touch Class
  • 任意の名前、任意の親クラスの選択
    • 素のコントローラなら UIViewController、テーブルなら UITableViewController
  • Storyboard でひもづけたいビューコントローラを選択、アイデンティティインスペクタで Class オプションの変更

ボタン押下で遷移

  • Storyboard でビューコントローラにボタンの追加
  • ボタンを右クリック Touch Up Inside からドラッグして遷移先のビューコントローラでドロップ

戻る遷移とコールバックの登録

  • 戻り先のビューコントローラで -(IBAction)SomeName:(UIStoryboardSegue*)segue; なメソッドを宣言すると戻り時のコールバックメソッドになる
  • Storyboard 戻り元のビューコントローラの Exit を選択、コネクションインスペクタで先ほどのコールバックメソッドから戻るボタンへドラッグしてひもづける

ビューの要素をコントローラにひもづける

  • 右上の Show the Assistant Editor (蝶ネクタイのアイコン) をクリックして Storyboard とコントローラのソースを表示
  • Storyboard で要素を右クリック、Referencing Outlet をコントローラの @interface セクションにひもづける

プロパティを宣言する

  • public なら .h の @interface で
  • private なら .m の @interface で
  • 記法は @property (オプション) 型 プロパティ名;
  • オプション
    • readonly : 読み込み専用
  • プロパティの初期値は nil

メソッドの宣言

遷移前実行メソッド

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if (sender != self.doneButton) return;
    if (self.textField.text.length > 0) {
        self.toDoItem = [[XYZToDoItem alloc] init];
        self.toDoItem.itemName = self.textField.text;
        self.toDoItem.completed = NO;
    }
}

テーブル関連

セクション数を返すメソッド

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 0;
}

アイテム数を返すメソッド

  • 例は配列の要素数を返す
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [self.toDoItems count];
}

ポジション毎にアイテムをセットするメソッド

  • 例は配列から対応する要素を取得してテキストにセットしている
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ListPrototypeCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];
    cell.textLabel.text = toDoItem.itemName;
    return cell;
}

ドキュメントを見る

  • Help > "Documentation and API Reference"