使用initWithImage:(UIImage*)图像将图像添加到UIBarButtonItem

Shu*_*Haq 58 iphone uibarbuttonitem

我想知道如何将图像设置为UIBarButtonItem,然后在创建UIBarButtonItem时使用InitWithImage将其添加到UIToolbar.

我正在执行以下操作,但它会创建一个空白空白,其中图像应位于UIToolbar上

UIImage *image = [UIImage imageNamed:@"6.png"];

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
Run Code Online (Sandbox Code Playgroud)

谢谢!

Kwe*_*exi 70

这是一个从Facebook徽标创建工具栏按钮的示例.创建指向图像的指针(已添加到xCode的文件),创建自定义按钮,更改按钮大小以匹配图像,设置按钮图像,从按钮视图创建工具栏按钮.

UIImage *faceImage = [UIImage imageNamed:@"facebook.png"];
UIButton *face = [UIButton buttonWithType:UIButtonTypeCustom];
face.bounds = CGRectMake( 0, 0, faceImage.size.width, faceImage.size.height );
[face setImage:faceImage forState:UIControlStateNormal];
UIBarButtonItem *faceBtn = [[UIBarButtonItem alloc] initWithCustomView:face];
Run Code Online (Sandbox Code Playgroud)

  • 如果你想为这个按钮添加目标动作,那就好了甚至更好..这个[face addTarget:self action:@selector(faceBtnPressed)forControlEvents:UIControlEventTouchUpInside] (3认同)

Vah*_*han 67

对于iOS 7+,您可以执行以下操作:

Objective-C的

 UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
 UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD:)];
Run Code Online (Sandbox Code Playgroud)

斯威夫特2.3

 let image = UIImage(named: "myImage")?.imageWithRenderingMode(.AlwaysOriginal)
 let button = UIBarButtonItem(image: image, style: .Plain, target: self, action: #selector(YOUR_METHOD(_:)))
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

let image = UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)
let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(YOUR_METHOD(_:)))
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的错误.谁能解释为什么这是必要的? (2认同)

Ste*_*vid 41

我会尝试设置

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
Run Code Online (Sandbox Code Playgroud)

  • 为什么这不是最高职位? (2认同)

Tim*_*wen 18

UIBarButtonItem文档:

条形图上显示的图像来自此图像.如果此图像太大而无法放在条形图上,则会缩放以适合该图像.通常,工具栏和导航栏图像的大小为20 x 20磅.源图像中的alpha值用于创建图像 - 忽略不透明值.

换句话说,UIBarButton项目将忽略图像的颜色并根据当前的条形样式重新着色.显示图像的唯一方法是使用不同的alpha值绘制图像.由于图像的所有像素都具有1的alpha值,因此它们都以最大亮度绘制,并获得空白区域.


Kin*_*ard 12

Swift中:

第一解决方案

let img = UIImage(named: "picture")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItemStyle.Plain, target: self, action: nil)
self.navigationItem.leftBarButtonItem = leftBarButtonItem
Run Code Online (Sandbox Code Playgroud)

二解决方案

let img = UIImage(named: "picture")!
let imgWidth = img.size.width
let imgHeight = img.size.height
let button = UIButton(frame: CGRect(x: 0, y: 0, width: imgWidth, height: imgHeight))
button.setBackgroundImage(img, forState: .Normal)
button.addTarget(self, action: nil, forControlEvents: UIControlEvents.TouchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)
Run Code Online (Sandbox Code Playgroud)