如何以编程方式将UIButton添加到UIToolBar?

时间:2011-08-16 16:03:27

标签: ios iphone uibutton uitoolbar programmatically-created

我已经使用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];  
}

3 个答案:

答案 0 :(得分: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;

(当然,您需要更改buttonClick:以期望UIBarButtonItem而不是UIButton。)

如果您真的想在其中放置U​​IButton,首先需要将UIButton包装在UIBarButtonItem中,如下所示:

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

然后将项目添加到工具栏中,如上所示。


至于为什么你的按钮没有显示在你发布的代码中,问题是UIButton的buttonWithType:创建了一个零宽度和零高度的按钮。您需要调整按钮的大小(手动或在设置标题后使用sizeToFit)以使其显示。修好之后,您会看到父视图左上角的按钮全部位于彼此之上;您需要根据需要手动定位它们。

答案 1 :(得分:1)

我认为您不能直接在代码中更改navigationController

更安全的方式是:

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

答案 2 :(得分:1)

工具栏方法

UIButton添加到UIToolBar的一个问题是按钮的宽度和按钮的位置难以控制

更简单的方法

删除工具栏并放置UIView,其背景图像与工具栏相同。现在,您可以将UIButton作为子视图添加到该视图中。这样您就可以更好地控制按钮的位置和宽度。您也可以添加其他视图。