web-dev-qa-db-ja.com

iOS 5でストーリーボードを使用している場合、UINavigationItemに複数のボタンを割り当てることはできません

私はiOS開発者であり、コードによるUIの開発に多くの経験があります。

UIを実装するのではなく、「設計」に切り替えることをテストしているため、現在、ストーリーボードの機能をテストしています。以前は、nib/xibを使用して多くの制限に固執していたため、スイッチで成功することはありませんでした。だからここにストーリーボードの新しい試みがあります:)

今私の質問-私はナビゲーションコントローラーとテーブルビューコントローラーを備えたiPadストーリーボードを設計しています。複数のUIBarButtonItemsを追加したいのですが、InterfaceBuilderを使用して各サイドに1つずつ追加できます。

コードは次のようになります。

UIBarButtonItem *b = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:nil action:nil];

UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
spacer.width = 20;

self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:self.editButtonItem, spacer, b, nil];

しかし、なぜIBを使用して複数のボタンを追加できないのですか? leftBarButtonItem、rightBarButtonItems、backBarButtonItemsのアウトレットのみがあります...

これは私を夢中にさせています¡

ありがとう!

25
user810395

[〜#〜]編集[〜#〜]

私がこの質問に答えたとき、Xcodeはストーリーボードに追加されたボタンをリンクする可能性を提供していませんでした。提示されたトリックは、ストーリーボードでセグエをデザインすることを許可しました。

Xcodeの最新バージョンでは、確かに@ecotaxによって導入されたソリューションと、後で@ShimanskiArtemのより詳細な回答が使用されます。


私はあなたと同じ問題を抱えていました、そして私は次のトリックを見つけました

複数のボタンが必要なnavigationControllerがあるとします。 iOS 5以降、配列を割り当てることができます。問題は、プログラムで行われるため、ストーリーボードを使用することのすべての利点が失われることです。

私は次のトリックを使用しました。通常、ナビゲーションバーに複数のボタンが必要な場合は、ツールバーは必要ありません。

ボタンを表示する現在のビュー(ナビゲーションコントローラーではない)で、変更してツールバーを表示します

bottomBar = bottomBar =ツールバーに推測されます。

enter image description here

下部にツールバーが表示されます。このバーにUIBarButtonsを追加します。セグエなどを使用して、それらを他のViewControllerにリンクします...

.hファイルに各ボタンのコンセントを作成します

@property (strong, nonatomic) IBOutlet UIBarButtonItem *Button1;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *Button2;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *Button3;

次に、viewDidLoad()で、ボタンをナビゲーションバーにリンクし、ツールバーを非表示にします。見たい順番と逆の順番で追加してください。

self.navigationItem.rightBarButtonItems =
    [NSArray arrayWithObjects:self.Button3, self.Button2, self.Button1, nil];

self.navigationController.toolbarHidden = YES;

そして、あなたはあなたのナビゲーションバーに複数のボタンを持っています

enter image description here

enter image description here

とシミュレータでの結果

enter image description here

enter image description here

26
HpTerm

私は簡単な解決策を見つけました。

1)次のカテゴリを追加します。

@interface UINavigationItem(MultipleButtonsAddition)
@property (nonatomic, strong) IBOutletCollection(UIBarButtonItem) NSArray* rightBarButtonItemsCollection;
@property (nonatomic, strong) IBOutletCollection(UIBarButtonItem) NSArray* leftBarButtonItemsCollection;
@end

@implementation UINavigationItem(MultipleButtonsAddition)

- (void) setRightBarButtonItemsCollection:(NSArray *)rightBarButtonItemsCollection {
    self.rightBarButtonItems = [rightBarButtonItemsCollection sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]];
}

- (void) setLeftBarButtonItemsCollection:(NSArray *)leftBarButtonItemsCollection {
    self.leftBarButtonItems = [leftBarButtonItemsCollection sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]];
}

- (NSArray*) rightBarButtonItemsCollection {
    return self.rightBarButtonItems;
}

- (NSArray*) leftBarButtonItemsCollection {
    return self.leftBarButtonItems;
}

@end

2)アイテムをView Controllerに追加します(アイテムはタグの昇順で並べ替えられます)

enter image description here

3)アイテムをUINavigationItemのleftBarButtonItemsCollectionまたはrightBarButtonItemsCollectionアウトレットコレクションに接続します

enter image description here

64
Shimanski Artem

HpTermのアドバイスに従いたかったのですが、私のアプリにはツールバーとナビゲーションバーの両方があります。
彼/彼女のコメントで概説されている方法は、このケースをサポートするために簡単に一般化できることがわかりました。ダミーツールバーを追加する代わりに、下の黒いバーにボタンをドラッグすることで、ViewControllerと同じレベルにボタンを追加することができます。

enter image description here

または左に表示されたテキストの概要:

enter image description here

ViewDidLoadの配列へのプロパティの割り当ては、HpTermが説明したとおりです。唯一の違いは、非表示にするダミーツールバーがないことです。

15
ecotax

Xcode7では、IBOutletを作成せずに、ストーリーボードのUINavigationItemに複数のボタンを直接追加することができます。複数のUIBarItemをナビゲーションアイテムの左または右セクションにドラッグするだけです。

Adding Multiple UIBarItems to Navigation Item

3
alcamla

@jchnxu @Shimanski Artemsソリューションを終了する方法をすでに理解している場合は、ストーリーボードに移動し、ナビゲーションバーが表示されているビューコントローラーにバーボタンアイテムをドラッグして、終了アイコンとレスポンダーアイコンがあるセクションにドラッグします。バッテリーアイコンの上。そこからコレクションに添付できます

0
kareem

男、これを試してみてください!

self.navigationItem.rightBarButtonItems = @[self.editButtonItem, spacer, b];
0