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

UIBarButtonItem created with UIButton not showing up in 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;

以下是我根据其他帖子尝试过但 无效的列表

所以,如果有人知道为什么这不起作用,我将非常感谢您的帮助。在这一点上,我基本上希望这是我忽略的一些非常愚蠢的事情,因为我不想在这上面工作这么久:(

编辑:
工具栏和按钮最初声明为

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

检查您的代码后。我发现如果您将按钮 属性 保持为(弱),按钮将不会添加到工具栏中。所以让你的按钮 属性 保持为 (strong,nonatomic)

@property(strong,nonatomic) UIButton *optionsButton

As Strong的意思是只要这个属性指向一个对象,那个对象就不会自动释放。在非 ARC 中,它是 retain

的同义词

what is the difference between strong and weak property?

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