ios - 如何使用图像和标签制作自定义 UIBarButtonItem?

我想制作一个包含图像和文本的自定义 UIBarButtonItem,如下所示:

我尝试继承 UIBarButtonItem 并覆盖此方法:

- (UIView *)customView
{
    if (!self.storedView) {

        UIView *temp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 120, 44)];
        UIImageView *tempImageView = [[UIImageView alloc] initWithImage:self.image];
        tempImageView.frame = CGRectMake(0, 0, self.image.size.width, self.image.size.height);
        UILabel *tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(44, 0, 100, 44)];
        tempLabel.text = @"text";
        [temp addSubview:tempImageView];
        [temp addSubview:tempLabel];
        self.storedView = temp;
    }
    return self.storedView;
}

我是这样使用它的:

UIBarButtonItem *left = [[LeftItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStylePlain target:self action:@selector(settingsPressed)];
left.title = @"Settings";
left.image = [UIImage imageNamed:@"settings.png"];
self.navigationItem.leftBarButtonItem = left;

但是使用这个我只得到图像,而不是标签。我做错了什么?

最佳答案

UIButton *button =  [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[button addTarget:target action:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(0, 0, 53, 31)];
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(3, 5, 50, 20)];
[label setFont:[UIFont fontWithName:@"Arial-BoldMT" size:13]];
[label setText:title];
label.textAlignment = UITextAlignmentCenter;
[label setTextColor:[UIColor whiteColor]];
[label setBackgroundColor:[UIColor clearColor]];
[button addSubview:label];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = barButton;

https://stackoverflow.com/questions/18844681/

相关文章:

iphone - NSNumber 和 NSInteger 有什么区别?

ios - 按字典中键的值对字典的 NSArray 进行排序

objective-c - 具有多个目标的 Objective C 到 Swift 头文件

objective-c - 将 Xcode 组创建为文件系统文件夹的工作流程

ios - '无效更新 : invalid number of rows in section 0

c++ - 我可以在同一个 Xcode 项目中拥有 Swift、Objective-C、C 和 C+

ios - MKMapView:自定义 View 代替 Annotation Pin

objective-c - 将自定义 subview (在 xib 中创建)添加到 View Con

iPhone - dequeueReusableCellWithIdentifier 用法

objective-c - 将参数传递给由 NSTimer 调用的方法