iPhone: создание UIBarButtonItem в форме стрелки - PullRequest
11 голосов
/ 25 февраля 2010

У меня есть UIBarButtonItem на панели навигации. Я хотел бы сделать это в форме стрелки. Я имею в виду, что хочу, чтобы он был квадратным, за исключением острой стороны. Кто-нибудь знает, как это сделать?

Спасибо!

Ответы [ 6 ]

17 голосов
/ 12 марта 2010

Я боролся с несколькими подходами к этому и, наконец, понял это, используя все ответы из нескольких источников. Есть несколько хитростей; этот фрагмент покажет все это (я создавал пользовательский rightNavButton, но вы можете легко адаптировать его для любого UIBarButtonItem):

// Produces a nice "right arrow" style button that mirrors the back arrow
// automatically added by the navController
//
UIImage *buttonImage = [UIImage imageNamed:@"forwardButton.png"];
UIButton *forwardButton = [UIButton buttonWithType:UIButtonTypeCustom];
[forwardButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[forwardButton setTitle:@"Meter" forState:UIControlStateNormal];
forwardButton.font = [UIFont boldSystemFontOfSize:12];
forwardButton.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[forwardButton addTarget:self action:@selector(showMeter) 
           forControlEvents:UIControlEventTouchUpInside];

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
           initWithCustomView:forwardButton];

Примечание: получается, что если вы попытаетесь установить цель и действие непосредственно на элементе кнопки после назначения пользовательского представления, используя UIButton, которое не будет выполняться, - вы должны установить цель и действие на Сама кнопка - по-видимому, navBar использует дословно предоставленную кнопку.

Это изображение, которое я использовал на непрозрачном черном navBar (очевидно, вы можете использовать что угодно): http://raretiger.com/images/forwardbutton.png

7 голосов
/ 25 февраля 2010

Создание собственного фона. См. Создание кнопки со стрелкой влево (как стиль «Назад» UINavigationBar) на UIToolbar , чтобы узнать, как это сделать.


Вы можете -pushNavigationItem:animated: отобразить встроенную кнопку "Назад", хотя вы не можете назначить ей пользовательские действия.


Для недокументированных методов вы можете использовать

UIButton* backButton = [UIButton buttonWithType:101];

для создания кнопки "назад".

4 голосов
/ 25 февраля 2010

Вы можете создать UIImageView или UIButton с требуемым изображением, а затем использовать:

[[UIBarButtonItem alloc] initWithCustomView: arrowButton];

Надеюсь, это поможет.

0 голосов
/ 06 марта 2013

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

Хитрость заключается в том, чтобы изменить название первого VC в viewWillDisappear и переустановить его, конечно, в viewWillAppear

(Само собой разумеется, по умолчанию, если не установлено leftBarButtonItem, UINavigationController покажет кнопку возврата с названием VC, который выдвинул текущий VC)

В ВК, куда вы добавляете свой текущий ВК, выполните

-(void) viewWillDisappear:(BOOL) animated {
  [super viewWillDisappear:animated];
  self.title = @"Back";
}

-(void) viewWillAppear:(BOOL) animated {
  [super viewWillAppear:animated];
  self.title = @"Original Title";
}
0 голосов
/ 21 сентября 2012

Более элегантное решение:

UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];
[backButtonItem setBackgroundImage:[UIImage imageNamed:@"back.png"]      forState:UIControlStateNormal     barMetrics:UIBarMetricsDefault];
self.navigationItem.leftBarButtonItem = backButtonItem;
0 голосов
/ 27 мая 2011

продолжение идеи @Plamen Dragozov: я заметил, что если вы оставите uibutton как есть, при прикосновении к нему будет происходить корректировка изображения, а это совершенно противоположно тому, что делает обычная кнопка навигации назад. Поэтому я снял флажок «выделено настраивает изображение», и он работает как шарм.

надеюсь, это поможет таким новичкам, как я.

...