3

在此处输入图像描述

如上所示,我想在工具栏上创建一个带有 UIImageView 和 UILabel 的 UIBarButtonItem。我试过了

UIButton *likecommButton = [UIButton buttonWithType:UIButtonTypeCustom];
    likecommButton.backgroundColor = [UIColor clearColor];
    [likecommButton addTarget:self action:@selector(likecommButtonClicked:) forControlEvents:UIControlEventTouchDown];


    UIImageView *likeImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"like.png"]];
    likeImageView.frame = CGRectMake(0.0, 0.0, LikeCommentImageEdge, LikeCommentImageEdge);
    likeImageView.backgroundColor = [UIColor clearColor];
    [likecommButton addSubview:likeImageView];
    [likeImageView release];

    CGSize numberSize = [@"99" sizeWithFont:[UIFont fontWithName:@"Verdana-Bold" size:12] 
                                     constrainedToSize:CGSizeMake(20.0, 20.0)  
                                         lineBreakMode:UILineBreakModeTailTruncation];

    _likeNumberLabel = [[UILabel alloc] initWithFrame: CGRectMake(likeImageView.frame.size.width, 0.0, numberSize.width, numberSize.width)];
    _likeNumberLabel.backgroundColor = [UIColor clearColor];
    _likeNumberLabel.textColor = [UIColor whiteColor];
    _likeNumberLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:12];
    _likeNumberLabel.textAlignment = UITextAlignmentRight;
    _likeNumberLabel.lineBreakMode = UILineBreakModeClip;
    [likecommButton addSubview:_likeNumberLabel];

    UIImageView *commentImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"comment.png"]];
    commentImageView.frame = CGRectMake(_likeNumberLabel.frame.origin.x + _likeNumberLabel.frame.size.width, 0.0, LikeCommentImageEdge, LikeCommentImageEdge);
    commentImageView.backgroundColor = [UIColor clearColor];
    [likecommButton addSubview:commentImageView];
    [commentImageView release];

    _commentNumberLabel = [[UILabel alloc] initWithFrame: CGRectMake(toolBarButtonWidth - numberSize.width, 0.0, numberSize.width, numberSize.width)];
    _commentNumberLabel.backgroundColor = [UIColor clearColor];
    _commentNumberLabel.textColor = [UIColor whiteColor];
    _commentNumberLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:12];
    _commentNumberLabel.textAlignment = UITextAlignmentRight;
    _commentNumberLabel.lineBreakMode = UILineBreakModeClip;
    [likecommButton addSubview:_commentNumberLabel];

    likecommButton.frame = CGRectMake(0.0, 0.0, toolBarButtonWidth, numberSize.height);

    _likeCommCountButton = [[UIBarButtonItem alloc] initWithCustomView:likecommButton];
    _likeCommCountButton.width = toolBarButtonWidth;
    _likeCommCountButton.enabled = NO;

但只能得到这个

在此处输入图像描述

如何像第一张图片一样创建 UIBarButtonItem,包括 UIImageView 和 UILabel 也有 UIBarButtonItemStyleBordered 样式?

谢谢


更新 20120506

这是遵循@RA 的想法——小工具栏

在此处输入图像描述

这个问题我知道如何将框架设置为工具栏,但无法获得其他两个 UIBarButtonItems“Like”和“Comment”的高度。那么我无法设置小工具栏的高度。

然后我尝试将所有控制器、两个图像视图和两个标签添加到 UISegmentControl

在此处输入图像描述

如您所见,第三个 uibarbuttonitem(UISegmentControl 之一)与其他两个不同。我设置

segmentControl.tintColor = [UIColor clearColor]; 
    segmentControl.backgroundColor = [UIColor clearColor]; 

不行。

我更喜欢@RA 的那个,但需要一种方法来获取另外两个 UIBarButtonItem 的高度来设置第三个小工具栏的高度。


更新 20120509

我花了太多时间,我必须继续前进,我现在正在使用 UISegmentControl 解决方案(哪种风格略有不同)。我不会结束这个问题。以后我会继续研究它。非常感谢下面朋友的帮助,尤其是@RA @vishiphone 你们给了我不同的想法。希望我们仍然可以团结起来挖掘更多的问题。我稍后会继续这个话题。希望你们还在这里!非常感谢!

4

5 回答 5

2

尝试将这些作为 UIButton 的普通/突出显示图像 - 作为 customViewUIBarButtonItem

(可伸缩宽度)

  1. BarButtonPressed;
  2. BarButtonPressed@2x
  3. 条形按钮普通
  4. BarButtonNormal@2x

BarButtonPressed BarButtonPressed@2x 条形按钮普通 BarButtonNormal@2x

于 2012-05-20T21:15:44.617 回答
1

我明白了,他们在做什么。

在该图像中,他们创建了UIToolBar一个小尺寸的,并在其中添加了三个UIBarButtonItem's,其中toolbar包含 2 个图像和 1 个标签 name respectively

之后,将其添加UIToolBarBarButtonItem with Bordered style.

但是,trick在添加这三个按钮时,UIToolbar它们是not having any border style针对那个 Barbuttons 的(UIBarButtonStyleNone-> 像这样但不完全是)。

所以只有看起来它有 2 个图像和一个标签。我已经做过这样的事情了。但没有这么棘手..

于 2012-04-26T15:45:30.827 回答
1

在此处输入图像描述试试这行代码,我认为这会对你有所帮助。

UIView *BtnView = [[UIView alloc] initWithFrame:CGRectMake(0,0,70,35)];
UIButton *myButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
[myButton setFrame:CGRectMake(0,3,70,32)];
[myButton setImage:[UIImage imageNamed:@"firstImage.png"] forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(compete) forControlEvents:UIControlEventTouchUpInside];



UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(52, -4, 21, 21)];
[imageView setImage:[UIImage imageNamed:@"Secongimage.png"]];
UILabel *badge_Label=[[UILabel alloc]initWithFrame:CGRectMake(5,3, 15, 15)];
badge_Label.backgroundColor=[UIColor clearColor];
badge_Label.font=[UIFont systemFontOfSize:12];
[badge_Label setText:@"20"];
[imageView addSubview:badge_Label];


[BtnView addSubview:myButton];
[BtnView addSubview:imageView];
[myButton release];

UIBarButtonItem *CompeteButton = [[UIBarButtonItem alloc]initWithCustomView:BtnView]; 

self.navigationItem.rightBarButtonItem = CompeteButton;


UIView *leftBtnView = [[UIView alloc] initWithFrame:CGRectMake(0,0,40,40)];
UIButton *menu_Button = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
[menu_Button setFrame:CGRectMake(0,3,37,37)];
[menu_Button setImage:[UIImage imageNamed:@"menubut.png"] forState:UIControlStateNormal];
[menu_Button addTarget:self action:@selector(list) forControlEvents:UIControlEventTouchUpInside];

[leftBtnView addSubview:menu_Button];

UIBarButtonItem *menuButton = [[UIBarButtonItem alloc]initWithCustomView:leftBtnView]; 
self.navigationItem.leftBarButtonItem = menuButton;
于 2012-05-07T04:19:23.367 回答
0

我认为您错过了为每个子视图设置框架。尝试使用 Frames 添加,然后您将得到您想要的。

于 2012-04-26T13:42:35.783 回答
0

您应该创建一个UIViewwhich 将成为 theUILabel和 the的包装器UiImageView,将它们添加为 this 的子视图UiView,然后像上面一样使用:

_likeCommCountButton = [[UIBarButtonItem alloc] initWithCustomView:_wrapper_view_];

并且不要忘记正确设置子视图的框架。

于 2012-04-26T13:43:20.690 回答