2013-06-07 4 views
0

Я думаю, что это будет глупый вопрос, но я не могу найти ответ. У меня есть несколько простых строк кода, чтобы поставить кнопку в панели навигации:UIButtonBarItem выглядит неправильно

UIBarButtonItem *cancelButton=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"button-cancel.png"] style:UIBarButtonItemStylePlain target:self action:@selector(cancelPressed:)]; 
UINavigationItem *item = [[UINavigationItem alloc] init]; 
item.leftBarButtonItem = cancelButton; 
item.hidesBackButton = YES; 
[self.navigationBar pushNavigationItem:item animated:NO]; 

Эта кнопка работает нормально, но это выглядит следующим образом: enter image description here

Любые мысли?

ответ

1

Вы, вероятно, хотите создать элемент кнопки бара с помощью настраиваемого представления, где пользовательский вид является UIButton:

UIImage *cancelImage = [UIImage imageNamed:@"button-cancel"]; 
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
cancelButton.frame = (CGRect){CGPointZero, cancelImage.size); 
[cancelButton setImage:cancelImage forState:UIControlStateNormal]; 
UIBarButtonItem *cancelBarButton = [[UIBarButtonItem alloc] initWithCustomView:cancelButton]; 
+0

Awesome. Благодаря! – Jason

0

Установите размер кнопки (cancelButton) в соответствии с размером кнопки-cancel.png.

stopButton.frame = CGRectMake();

0

Вместо этого создайте пользовательский тип UIButton с изображением. Установите цель и селектор UIbutton на то, что вы хотите, чтобы элемент кнопки панели делал. Затем выполните инициализацию элемента кнопки панели следующим образом:

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

Где кнопка вашего UIButton с использованием нужного изображения.

0

UIBarButtonItem/initWithImage: обычно используются для создания знаковых кнопок - не кнопки, которые имеют текст в них.

Если вы хотите изменить внешний вид обычного текстового UIBarButtonItem, вам просто нужно установить фоновое изображение элемента панели. Таким образом, вам не нужно иметь изображения для каждой кнопки, содержащие текст кнопки.

Docs: - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics

Вы также можете установить это приложение шириной по вызывающему setBackgroundImage: на UIBarButtonItem внешний вид прокси.

И, наконец, обратите внимание, что вам, вероятно, потребуется создать изображение с возможностью изменения размера, чтобы перейти к setBackgroundImage. Это позволит вашему одиночному изображению вмещать любой размер кнопки. См. UIImage/resizeableImageWithCapInsets:resizingMode: (iOS6) или UIImage/stretchableImageWithLeftCapWidth:topCapHeight: (pre iOS6)

Вы, безусловно, можете сделать то, что предлагает @Wain, но есть недостатки. Во-первых, ваш обработчик печати больше не будет отправлять UIBarButtonItem в качестве «отправителя». Возможно, это не так, пока у вас нет обычного обработчика, который вдруг должен определить, является ли отправитель UIBarButtonItem или UIButton, или если вы хотите представить UIPopoverController против этого BarButtonItem (но у вас есть только ссылка UIButton ...)