UIToolbar のItems を切り替える

投稿者: | 2013/02/06

ツールバーのボタン群を入れ替えたいわけですが…

ツールバーに並ぶボタン群を違う内容に切り替えたい場合があります。

そんなとき、Storyboard 万歳なゆとりとしては、こう考えます。
UIStoryboard からinstantiateViewControllerWithIdentifier: 使って部品呼び出して、入れ替え出来んかな?と。

で、あれこれ試した結果、到達した結論が以下です。

 

コード書いた方がラク

ボタンなどのアイテム群を入れ替えたい場合はコードで実装した方がラクです。

身も蓋もありませんが、これが結論です。

 

コード

好みのアイテム群をセットするメソッドで用意して、欲しい時に呼び出して更新します。
アイテム群の組み合わせパターンが多い場合は、アイテム群の生成クラスとか用意すると良いでしょうが、2種類を入れ替えたい程度なら、こんなんで十分でしょう。

/* 以下の関数2つを入れ替えたいタイミングで任意に呼び出す */

// アイテム群その1
- (void)setToolbarItems1 {
    // アイテム群格納用の配列
    NSMutableArray* tbItems = [[NSMutableArray alloc] init];

    // 普通のBarButtonItem
    UIBarButtonItem* bbiHoge = [[UIBarButtonItem alloc] init];
    [bbiClear setStyle:UIBarButtonItemStyleBordered];
    [bbiClear setTitle:@"Hoge"];
    [bbiClear setTarget:self];
    [bbiClear setAction:NSSelectorFromString(@"tapHoge:")];
    
    // フレキシブルスペース
    UIBarButtonItem* bbiFlexSpace = [[UIBarButtonItem alloc] 
        initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                             target:nil
                             action:nil];
    
    // システムボタン
    UIBarButtonItem* bbiSave = [[UIBarButtonItem alloc]
        initWithBarButtonSystemItem:UIBarButtonSystemItemSave
                             target:self
                             action:NSSelectorFromString(@"save:")];
    [bbiSave setTitle:@"Save"];
    
    // まとめて配列にセット
    [tbItems addObject:bbiHoge];
    [tbItems addObject:bbiFlexSpace];
    [tbItems addObject:bbiSave];
    
    // ツールバーに放り込み
    [[self toolbarMain] setItems:tbItems];
}

// アイテム群その2
- (void)setToolbarItems2 {
    // アイテム群その1 と同様にお好みでアイテム群を用意
}

実際にはStoryboard 使って同じ様なことができるのかもしれんです。
ご存知の方がいらっしゃいましたら、コメントでもTwitter でも教えて下さると嬉し泣きます。

 



 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください