我需要在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;
结果是我想要的,看起来像这样
navigation bar http://img207.imageshack.us/img207/3383/navigationbara.jpg
在UIToolBar中做同样的事情,我正在添加到UITableViewCell的contentView
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];
问题是我得到这样的东西:
toolbar http://img209.imageshack.us/img209/1374/toolbary.jpg
这肯定是因为UINavigationBar和UIToolBar没有以相同的方式绘制... 有人可以指出如何解决这个问题吗?
答案 0 :(得分:2)
在UIToolbar
上使用 UIBarButtonItemStyleBordered
而不是 UIBarButtonItemStylePlain
。
UINavigationBar
将不会绘制相同的按钮。
答案 1 :(得分: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];
我没有测试过这个,所以我不知道它是否会起作用。
答案 2 :(得分: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];