0

我需要向 UINavigationController 的 UIToolbar 添加按钮,这也是我的根。我希望 UIToolbar 在显示特定 UIViewController 时出现。因此,我将此代码放在 UIViewController 子类的 viewDidLoad 方法中:

UIBarButtonItem* item = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething)];
item.width = 300;
item.tintColor = [UIColor whiteColor];
UIBarButtonItem* item2 = [[UIBarButtonItem alloc] initWithTitle:@"Title2" style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething)];

NSMutableArray* theItems = [self.navigationController.toolbar.items mutableCopy];
[theItems addObject:item];
[theItems addObject:item2];
[self.navigationController.toolbar setBarStyle:UIBarStyleBlackOpaque];
[self.navigationController setToolbarHidden:NO animated:YES];
[self.navigationController setToolbarItems:theItems animated:NO];
//self.navigationController.toolbarItems = theItems; // Tried both

UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
label.text = @"kjhdkjhadsda";
[self.navigationController.toolbar addSubview:label];

这仅显示 UILabel 处于正确位置,不会出现其他任何内容。UILabel 对我来说没用,它只是一个测试。我还尝试分配一个新数组,而不是从组件中复制一个。忽略缺少的版本,这只是测试代码。

我阅读了很多关于此的问题,但似乎没有答案有助于使其发挥作用。知道这段代码可能有什么问题吗?

4

1 回答 1

2

似乎您正在尝试在行中制作nil的可变副本

[self.navigationController.toolbar.items mutableCopy];

默认情况下, navigationController.toolbar.items方法没有项目并返回nil

更新

方法- (void)setToolbarItems:(NSArray*)toolbarItems animated:(BOOL)animated如果您将其发送到 UINavigationController,则不会执行任何操作。您需要将工具栏项目设置为由导航控制器管理的控制器。此行将使您的按钮可见:

[self setToolbarItems:theItems animated:NO];
于 2013-03-06T12:05:59.430 回答