6

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

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];  
}
4

3 に答える 3

9

UIBarButtonItem(UIButtonではなく)を実際にツールバーに追加する場合は、1つ以上のUIBarButtonItemを作成し、それらをNSArray(またはNSMutableArray)に配置して、その配列をitemsツールバーのプロパティに割り当てます。詳細については、UIBarButtonItemのドキュメントを参照してください。上記のコードを使用すると、次のようになります。

    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;

(もちろん、buttonClick:UIButtonではなくUIBarButtonItemを期待するようにを変更する必要があります)。

本当にUIButtonをそこに配置したい場合は、最初にUIButtonをUIBarButtonItemでラップする必要があります。

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

次に、上記のようにツールバーにアイテムを追加します。


投稿されたコードにボタンが表示されない理由については、UIButtonがbuttonWithType:幅と高さがゼロのボタンを作成するという問題があります。sizeToFitボタンを表示するには、ボタンのサイズを(手動で、またはタイトルを設定した後に使用して)サイズを変更する必要があります。これを修正すると、親ビューの左上隅にあるボタンがすべて重なり合っていることがわかります。必要に応じて手動で配置する必要があります。

于 2011-08-16T16:22:35.230 に答える
1

navigationControllerそのようにコードを直接変更することはできないと思います。

より安全な方法は次のとおりです。

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"]
                                                           style:UIBarButtonItemStyleBordered
                                                          target:self
                                                          action:@selector(buttonClick:)];
self.navigationItem.rightBarButtonItem = button;
于 2012-10-04T05:35:10.283 に答える
1

ツールバーアプローチ

に追加UIButtonする際の問題の1つUIToolBarは、ボタンの幅とボタンの位置を制御するのが難しいことです。

よりシンプルなアプローチ

ツールバーを削除し、ツールバーとUIView同じ背景画像を配置します。UIButtonこれで、をサブビューとしてそのビューに追加できます。このようにして、ボタンの位置と幅をより細かく制御できます。また、他のビューを追加することもできます。

于 2012-11-23T03:47:30.337 に答える