使用UIButton创建的UIBarButtonItem未显示在UIToolbar中

时间:2017-06-16 00:44:10

标签: ios objective-c uibutton uibarbuttonitem uitoolbar

我试图用UIButton作为自定义视图创建一个UIBarButtonItem。当我做它,它没有显示。以下是我宣布按钮的方式:

self.optionsButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.optionsButton setFrame:CGRectMake(0, 0, 30, 20)];
[self.optionsButton setTitle:@"Options" forState:UIControlStateNormal];
[self.optionsButton addTarget:self
                       action:@selector(presentOptions)
             forControlEvents:UIControlEventTouchUpInside];
[self.optionsButton setTintColor:[UIColor clearColor]];
[self.optionsButton setBackgroundColor:[[UIColor blueColor] colorWithAlphaComponent:0.1] forUIControlState:UIControlStateSelected];
[self.optionsButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self.optionsButton setTitleColor:[UIColor blueColor] forState:UIControlStateSelected];
self.optionsButton.layer.cornerRadius = 5;
self.optionsButton.clipsToBounds = YES;
[self.optionsButton sizeToFit];

以下是我宣布UIToolbar的方式

self.toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 44)];
NSMutableArray *items = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpaceBefore = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[items addObject:flexSpaceBefore];
[items addObject:[[UIBarButtonItem alloc] initWithCustomView:self.optionsButton]];
UIBarButtonItem *flexSpaceAfter = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[items addObject:flexSpaceAfter];
[self.toolbar setItems:items];

[self.view addSubview:self.toolbar];
CGRect toolbarFrame = self.toolbar.frame;
toolbarFrame.origin.y = self.view.frame.size.height - toolbarFrame.size.height - self.view.frame.origin.y;
toolbarFrame.size.width = self.view.frame.size.width;
self.toolbar.frame = toolbarFrame;

以下列出了我根据尚未使用的其他帖子尝试过的事项:

  • One Two Three Four:使用导航控制器工具栏和[NavController setToolbarItems - 它向我展示了工具栏(我确保我的不再是显示)但没有按钮
  • One:确保按钮具有有效框架 - 显然,从我的代码中您可以看到该按钮具有适合文本的有效框架

所以,如果有人知道为什么这不起作用,我真的很感激帮助。在这一点上,我基本上希望我忽略了一些非常愚蠢的东西,因为我不想长期坚持这个:(

修改
工具栏和按钮最初声明为

@property (nonatomic, strong) UIButton *optionsButton;
@property (nonatomic, strong) UIToolbar *toolbar;

2 个答案:

答案 0 :(得分:0)

查看代码后。我发现如果你将按钮属性保持为(弱),则不会在工具栏中添加按钮。因此,请将您的按钮属性保持为(强,非原子)

@property(strong,nonatomic) UIButton *optionsButton

As Strong意味着只要此属性指向一个对象,该对象就不会自动释放。在非ARC中,它是retain

的同义词

what is the difference between strong and weak property?

答案 1 :(得分:0)

我明白了!就像我希望的那样,这是愚蠢的。我正在viewDidLoad中直接设置按钮,并在辅助函数中设置工具栏。我曾经以为我在声明按钮之前调用了辅助函数,但事实证明我在按钮被声明之前调用了它...经验教训:使用断点和Xcode调试器更多。