我已经使用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];
}
答案 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。)
如果您真的想在其中放置UIButton,首先需要将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
作为子视图添加到该视图中。这样您就可以更好地控制按钮的位置和宽度。您也可以添加其他视图。