1

我需要在 UIToolBar 中使用一个简单的 UIBarButtonItem。

我使用此代码将带有自定义图像的按钮添加到导航栏:

UIBarButtonItem *cloneButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image_sheep.png"] style:UIBarButtonItemStylePlain target:self action:@selector(clone)];
NSArray *rightItems = [NSArray arrayWithObject:cloneButton];
self.navigationItem.rightBarButtonItems = rightItems;

结果是我想要的,它看起来像这样

导航栏 http://img207.imageshack.us/img207/3383/navigationbara.jpg

在我添加到 UITableViewCell 的 contentView 的 UIToolBar 中做同样的事情时

UIBarButtonItem *cloneButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image_sheep.png"] style:UIBarButtonItemStylePlain target:self action:@selector(clone)];
UIBarButtonItem *leftSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
toolbar.items = [NSArray arrayWithObjects:leftSpace, cloneButton, nil];

问题是我得到这样的东西:

工具栏 http://img209.imageshack.us/img209/1374/toolbary.jpg

这肯定是由于 UINavigationBar 和 UIToolBar 的绘制方式不同......有人可以指出如何解决这个问题吗?

4

3 回答 3

2

在您UIToolbar使用 UIBarButtonItemStyleBordered而不是UIBarButtonItemStylePlain.

UINavigationBar不会在没有按钮外观的情况下绘制相同的按钮。

于 2012-05-30T07:51:33.860 回答
1

这就是 UIToolbar 应该如何工作的。根据文档:

表示项目正常和突出显示状态的工具栏图像派生自​​您使用从 UIBarItem 类继承的图像属性设置的图像。例如,将图像转换为白色,然后通过为正常状态添加阴影来进行斜切。

也就是说,您可以通过使用自定义视图而不是图像创建 UIBarButtonItem 来获得所需的结果。像这样:

UIImage *sheepImage = [UIImage imageNamed:@"image_sheep.png"];
UIButton *sheepButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sheepButton setImage:sheepImage forState:UIControlStateNormal];
[sheepButton addTarget:self action:@selector(clone) forControlEvents:UIControlEventTouchUpInside];
[sheepButton setShowsTouchWhenHighlighted:YES];
[sheepButton sizeToFit];
UIBarButtonItem *cloneButton = [[UIBarButtonItem alloc] initWithCustomView:sheepButton];

我还没有测试过,所以我不知道它是否会起作用。

于 2012-05-30T07:51:58.507 回答
0

我再也看不到问题中发布的图像了。但我很确定我们正在尝试在 UINavigationBar 中模仿 UIToolBar 的 UIBarButtonItemStylePlain。

除了这条线之外,Benzado 几乎是正确的:

[sheepButton setImage:sheepImage forState:UIControlStateNormal];

这会将图像放在触摸指示器的前面。UIToolBar 在图像前面显示触摸。所以要模仿 UINavigationBar 中的 UIToolBar 样式:

UIImage *sheepImage = [UIImage imageNamed:@"image_sheep.png"];
UIButton *sheepButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sheepButton setBackgroundImage:sheepImage forState:UIControlStateNormal];
[sheepButton addTarget:self action:@selector(clone) forControlEvents:UIControlEventTouchUpInside];
[sheepButton setShowsTouchWhenHighlighted:YES];
[sheepButton sizeToFit];
UIBarButtonItem *cloneButton = [[UIBarButtonItem alloc] initWithCustomView:sheepButton];
于 2013-04-08T02:59:34.190 回答