UINavigationControllerのボタンをコーディングで追加

2010/08/16

UINavigationControllerのpushViewControllerで画面遷移していく場合、 上部のナビゲーションバーのボタン追加はコーディングでしかやはりできないですよね?

1ページ毎にUINavigationBarをつける画面遷移方法もあるけど、それだと今度はUINavigationControllerの意味が・・・ですよね。

ナビゲーションボタンの種類

さて、ボタンの種類はUIBarButtonItem.hに定義されています。

typedef enum {
    UIBarButtonSystemItemDone,
    UIBarButtonSystemItemCancel,
    UIBarButtonSystemItemEdit,  
    UIBarButtonSystemItemSave,  
    UIBarButtonSystemItemAdd,
    UIBarButtonSystemItemFlexibleSpace,
    UIBarButtonSystemItemFixedSpace,
    UIBarButtonSystemItemCompose,
    UIBarButtonSystemItemReply,
    UIBarButtonSystemItemAction,
    UIBarButtonSystemItemOrganize,
    UIBarButtonSystemItemBookmarks,
    UIBarButtonSystemItemSearch,
    UIBarButtonSystemItemRefresh,
    UIBarButtonSystemItemStop,
    UIBarButtonSystemItemCamera,
    UIBarButtonSystemItemTrash,
    UIBarButtonSystemItemPlay,
    UIBarButtonSystemItemPause,
    UIBarButtonSystemItemRewind,
    UIBarButtonSystemItemFastForward,
#if __IPHONE_3_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    UIBarButtonSystemItemUndo,
    UIBarButtonSystemItemRedo,
#endif
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    UIBarButtonSystemItemPageCurl,
#endif
} UIBarButtonSystemItem;

これを見る限りUndo、RedoボタンがiOS4から使えなくなってるようです。

サンプル

ボタン追加はUIBarButtonItem initWithBarButtonSystemItem:で設定します。

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] 
                                  initWithBarButtonSystemItem:UIBarButtonSystemItemSave 
                                  target:self 
                                  action:@selector(アクション後のメソッド名)];