добавить изображение в UIBarButtonItem, используя initWithImage: (UIImage *) image - PullRequest
57 голосов
/ 21 июля 2010

Я хотел бы знать, как установить изображение в UIBarButtonItem, который затем будет добавлен в UIToolbar, используя InitWithImage при создании UIBarButtonItem.

Я делаю следующее, но он создает пустой пробел, где изображение должно быть на UIToolbar

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

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

Спасибо!

Ответы [ 10 ]

70 голосов
/ 08 февраля 2011

Вот пример, который создает кнопку панели инструментов из логотипа 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];
66 голосов
/ 28 февраля 2014

А для 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:)];

Swift 2,3

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

Swift 3.0

let image = UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)
let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(YOUR_METHOD(_:)))
41 голосов
/ 28 июля 2010

Я бы попробовал установить

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
17 голосов
/ 19 мая 2011

Из документации UIBarButtonItem :

Изображения, отображаемые на панели, получены из этого изображения. Если это изображение слишком велико, чтобы поместиться на панели, оно масштабируется, чтобы соответствовать. Как правило, размер панели инструментов и изображения панели навигации составляет 20 х 20 точек. Альфа-значения в исходном изображении используются для создания изображений - непрозрачные значения игнорируются.

Другими словами, элемент UIBarButton игнорирует цвет вашего изображения и перекрашивает его в соответствии с текущим стилем панели. Единственный способ отобразить изображение, если изображение нарисовано с использованием различных значений альфа. Поскольку все пиксели вашего изображения имеют альфа-значение 1, все они нарисованы с максимальной яркостью, и вы получите пробел.

12 голосов
/ 05 июля 2015

In 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

Второй раствор

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)
2 голосов
/ 27 августа 2014

После того, как вы создали элемент панели кнопок, сделайте следующее:

systemItem1.image = [systemItem1.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
0 голосов
/ 10 октября 2018

Вы можете создать UIBarButtonItem с помощью стандартных системных значков , используя- initWithBarButtonSystemItem:target:action:

Например:

[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(YOUR_METHOD:)];
0 голосов
/ 29 мая 2014

Я бы написал тот же код, что и вы. Обратите внимание, что при добавлении изображения в проект убедитесь, что оно добавлено к цели , против которой вы строите.

0 голосов
/ 29 ноября 2013

UIBarbuttonItem initWithImage не будет создавать кнопку панели с указанным изображением.Создает шаблон кнопки UIB с использованием данного изображения.Если указанное изображение не является прозрачным, на нем будет отображаться кнопка панели с указанным цветом, который имеет размер изображения.Если изображение имеет непрозрачные части, то цвет непрозрачного будет заполнен на непрозрачных частях, таких как UIBarButtonSystemItemBookmarks по умолчанию. Он имеет непрозрачную границу и прозрачную внутреннюю сторону.

В вашем случае титновый цвет белый, поэтому он показывает белый.

0 голосов
/ 13 января 2011

У меня тоже была эта проблема, и я решил ее, используя файл png с альфа-каналом. Я пытался сделать быстрый макет и добавил кнопку «Назад» с jpg-файлом на фоне цвета кнопок по умолчанию. Я получил белый прямоугольник. Но когда я создал стрелку на прозрачном фоне и сохранил ее в виде файла png, это сработало.

...