2012年5月24日木曜日

ナビゲーションバーにボタンを表示させる

ナビゲーションバーにボタンを表示させる際の覚え書きです。ボタンを表示させるには「UIBarButtonItem」クラスを使います。

以下が参考記事を元にした例になります。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  //①

    if (self) {
        UIBarButtonItem *hogeMetButton = [[UIBarButtonItem alloc] initWithTitle:@"ほげほげ" style:UIBarButtonItemStyleBordered target:self action:@selector(hogeMetButtonPush:)];  //②
        hogeMetButton.width = (CGFloat)150;  //③
        self.navigationItem.rightBarButtonItem = hogeMetButton;  //④
    }
    return self;
}

解説

initWithNibName: bundle:メソッド

まず、2~12行目まで全体を囲んでいるinitWithNibName: bundle:メソッドなんですが、これはこちらの記事から説明を抜粋すると

指定したXIBファイルを開くための初期処理を実行。IBで作成したxibファイルを読み込むための前準備。

とのことです。またこちらの記事より、Interface Builderで画面設計をした場合は必ずこのメソッドで初期化しなければならないようです。

initWithNibName: bundle:メソッドをオーバーライドしています。上位クラスのメソッドを呼び出すため「super」をレシーバとして使っています。第2引数のbundle(バンドル)はnibファイルのディレクトリの位置を返します。ない場合は「nil」が返ります。

UIBarButtonItemクラスでインスタンス「hogeMetButton」を生成を行います。その際に「action:」メソッドでボタンがタップされたときに実行するメソッドを指定しています。

ボタンのサイズを指定しています。

navigationItemオブジェクトの右ボタンにインスタンス変数hogeMetButtonを代入してボタンの実装を完了しています。

initWithNibName: bundle:メソッドについて

initWithNibName:bundle:メソッドについて参考になりそうな記事を以下にまとめておきます。

initとinitWithNibNameの関係 | bi_naの日記
iPhoneアプリ開発、その(167) 間違っとったわ〜 | テン*シー*シー

参考記事

[Objective-C][iPad]NavigationBarにボタンを表示する | Bugle Diary
iPhone SDK でチュートリアル | iPone SDK | iPod nano, iPodtouch, iPhone + iTunes完全活用法
Foundation(バンドル)| Second Flush

0 件のコメント:

コメントを投稿