どのように私は、iPhone上のビューコントローラのツールバーからボタンを削除しますか?

StackOverflow https://stackoverflow.com/questions/2618546

質問

私は、ツールバーにボタンを追加するための素晴らしい作品のコードを持っています:

NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,shuffleBarItem,flexibleSpace,nil];
self.toolbarItems = toolbarItems;
しかし、私はまた、ツールバーの項目を削除できるようにしたいです。私は法の下に使用する場合は、自分のアプリケーションがクラッシュします:

NSArray* toolbarItems = [NSArray arrayWithObjects:flexibleSpace,nil];
self.toolbarItems = toolbarItems;

私は動的にiPhone上のツールバーを変更することができますどのように誰を知っていますか?

ありがとうございます。

役に立ちましたか?

解決

変更それNSMutableArrayにます。

NSMutableArray* _toolbarItems = [NSMutableArray arrayWithCapacity: 3]; 
[ _toolbarItems addObjects: flexibleSpace,shuffleBarItem,flexibleSpace,nil];

self.toolbarItems = _toolbarItems;

あなたは、配列から項目を削除したいときます:

NSInteger indexOfItem = ...
[ _toolbarItems removeObjectAtIndex: indexOfItem ];

self.toolbarItems = _toolbarItems;

注あなたは、配列内のオブジェクトを繰り返し、そしてremoveObjectを呼び出しているので、この場合には、あなたが実際に配列に[ _toolbarItems removeObject: flexibleSpace ]の両方のインスタンスを削除しますflexibleSpaceを使用してはならないこと

他のヒント

前面または背面から項目を削除するには、あなたがsubarrayWithRangeを使用することができ、すなわち:ます。

NSRange allExceptLast;
allExceptLast.location = 0;
allExceptLast.length = [self.toolbarItems count] - 1;
self.toolbarItems = [self.toolbarItems subarrayWithRange:allExceptLast];

あなたが途中からオブジェクトを削除したい場合は、可能性のいずれか(過度に複雑になるかもしれません)使用-[NSArray filteredArrayUsingPredicate:]、またはブルートフォースます:

NSMutableArray *mutToolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];
[mutToolbarItems removeObjectAtIndex:<index of object>];
self.toolbarItems = mutToolbarItems;

removeObjectAtIndex:self.toolbarItemsとして公開されているので、あなたが、(あなたが上記の方法を使用している場合でも)、直接toolbarItemsNSArrayを送信しないように注意してください - あなたは何も持っているので(おそらくクラッシュをコンパイラの警告を取得していない、とyou'll )それは実際に舞台裏でNSMutableArrayとして実装されるかどうかを制御。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top