2011-08-16 8 views
5

私はInterface Builderを使用してツールバーを追加しましたが、実行時に条件付きでボタンを追加する必要があります。エラーは表示されませんが、動的ボタンはツールバーに表示されません。 arrayOfModulesScreensに必要なデータがロードされていることを確認しました。少なくともそれは働く(:))。ボタンをUIViewに追加してから、そのビューをツールバーに追加する必要がありますか?ただ大声で考えている。おそらく、より良いアプローチがありますか?解決につながる手がかりを事前に感謝します。UIToolBarにUIButtonをプログラムでどのように追加するのですか?

CustomFormController.h

@interface CustomFormController : UIViewController { 
    UIToolbar *screensBar; 
} 

CustomFormController.m

EPData *epData = [[EPData alloc] init]; 
NSArray *screens = [epData loadPlistIntoArray:@"Screens"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"process_module_id == %@", process_modulesID]; 
NSArray *arrayOfModulesScreens = [screens filteredArrayUsingPredicate:predicate]; 

for(int i=0; i < [arrayOfModulesScreens count]; i++) { 
    NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    [button setTitle:[dictRow objectForKey:@"screen_title"] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
    [screensBar addSubview:button]; 
} 

答えて

8

あなたが実際にツールバーにUIBarButtonItem(ないUIButton)を追加したいしている場合は、あなただけの一つ以上のUIBarButtonItemsを作成し、それらをNSArray(またはNSMutableArray)に入れ、その配列をツールバーのitemsプロパティに割り当てます。詳細はthe UIBarButtonItem documentationを参照してください。このようになりますよう、上記のコードを使用する:

NSMutableArray *items = [NSMutableArray array]; 
    for (int i = 0; i < [arrayOfModulesScreens count]; i++) { 
     NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
     UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(buttonClick:)]; 
     [items addObject:button]; 
     [button release]; 
    } 
    screensBar.items = items; 

(あなたがなり、当然のことながら、その代わりにUIButtonのUIBarButtonItemを期待するあなたのbuttonClick:を変更する必要があります)。

あなたが本当にそこにUIButtonを入れたい場合は、UIBarButtonItemにUIButtonをラップするためにあなたの最初の必要性、このような何か:

UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease]; 

は、次に、上記のように、ツールバーに項目を追加します。あなたのボタンがあなたの投稿をコードで表示されない理由については


、問題はUIButtonのbuttonWithType:がゼロの幅と高さゼロを持つボタンを作成することです。表示させるには、ボタンを手動で、またはタイトルを設定したあとsizeToFitを使用してサイズを変更する必要があります。これを修正すると、親ビューの左上隅にあるボタンがすべて上に重なることがわかります。適切に手動で配置する必要があります。

+1

これは魅力的に機能しました。皆さんは素晴らしいです! – iamtoc

+0

なぜ画像が表示されなかったのかは完全にわかります。それに触れてより良い選択肢を提供してくれてありがとう。 – iamtoc

1

navigationControllerをこのようなコードで直接変更することはできません。

安全な方法は、これだろう

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                  style:UIBarButtonItemStyleBordered 
                  target:self 
                  action:@selector(buttonClick:)]; 
self.navigationItem.rightBarButtonItem = button; 
1

ツールバーアプローチUIToolBarUIButtonを追加すると

一つの問題は、ボタンのボタンとポジショニングの幅は

を制御することが困難であるということです

簡略化アプローチ

ツールバーを削除し、UIViewにツールバーと同じ背景イメージを置きます。これで、そのビューにサブビューとしてUIButtonを追加できます。この方法で、ボタンの位置と幅をより詳細に制御できます。また、他のビューも追加できます。

関連する問題