如何以编程方式将 UIButton 添加到 UIToolBar?
Posted
技术标签:
【中文标题】如何以编程方式将 UIButton 添加到 UIToolBar?【英文标题】:How does one add UIButton to UIToolBar programmatically? 【发布时间】:2011-08-16 16:03:26 【问题描述】:我已经使用 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];
【问题讨论】:
【参考方案1】:如果你真的想在工具栏中添加一个 UIBarButtonItem(不是 UIButton),你只需创建一个或多个 UIBarButtonItem,将它们放在一个 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)。
如果你真的想在其中放置一个 UIButton,你首先需要将 UIButton 包装在一个 UIBarButtonItem 中,如下所示:
UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];
然后像上面一样将项目添加到工具栏。
至于为什么您的按钮没有显示在您发布的代码中,问题在于 UIButton 的buttonWithType:
创建了一个宽度为零、高度为零的按钮。您需要调整按钮的大小(手动或在设置标题后使用sizeToFit
)以使其显示。修复后,您会看到按钮都在父视图的左上角彼此重叠;您需要根据需要手动定位它们。
【讨论】:
这完全可以解释为什么没有图像显示。感谢您谈到这一点并提供更好的选择。【参考方案2】:我认为您不能像那样直接在代码中更改navigationController
。
更安全的方法是:
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"]
style:UIBarButtonItemStyleBordered
target:self
action:@selector(buttonClick:)];
self.navigationItem.rightBarButtonItem = button;
【讨论】:
【参考方案3】:工具栏方法
将UIButton
添加到UIToolBar
的一个问题是按钮的宽度和按钮的位置难以控制
更简单的方法
删除工具栏并放置一个UIView
,其背景图像与您的工具栏相同。现在您可以将UIButton
作为子视图添加到该视图。这样您就可以更好地控制按钮的位置和宽度。您也可以添加其他视图。
【讨论】:
以上是关于如何以编程方式将 UIButton 添加到 UIToolBar?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式将 UIButton 添加到 UITableView 错误点
以编程方式将 UIButton 添加到 rootview,我做错了啥?
以编程方式将 UIButton 添加到 UITableView 但按钮不显示