У меня есть UIBarButtonItem на панели навигации. Я хотел бы сделать его стрелой. Под этим я подразумеваю, что я хочу, чтобы он был квадратным, за исключением узкой стороны. Кто-нибудь знает, как это сделать?
Спасибо!
У меня есть UIBarButtonItem на панели навигации. Я хотел бы сделать его стрелой. Под этим я подразумеваю, что я хочу, чтобы он был квадратным, за исключением узкой стороны. Кто-нибудь знает, как это сделать?
Спасибо!
Я боролся с несколькими подходами к этому и, наконец, понял это, используя все ответы из нескольких источников. Есть несколько трюков; этот фрагмент покажет все (я создавал пользовательский 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забастовкa >
Создайте собственный фон. См. Создание кнопки со стрелкой влево (например, стиль "UINavigationBar" ) на UIToolbar для чего.
Вы можете -pushNavigationItem:animated:
сделать встроенную кнопку возврата, хотя вы не можете назначить ему специальные действия.
Для недокументированных методов вы можете использовать
UIButton* backButton = [UIButton buttonWithType:101];
для создания обратного "button".
Вы можете создать UIImageView или UIButton с требуемым изображением, затем использовать:
[[UIBarButtonItem alloc] initWithCustomView: arrowButton];
Надеюсь, что это поможет.
Продолжая идею @Plamen Dragozov: я заметил, что если вы оставите uibutton как есть, это вызовет настройку изображения при касании, и это совершенно противоположно тому, что делает обычная кнопка назад. Так что я сделал это, чтобы снять флажок "подсвечивать настройки изображения", и это работает как шарм.
надеюсь, что это поможет новичкам, как я.
Более элегантное решение:
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;
Моя проблема заключалась в переименовании кнопки "Назад", которая появляется на толкаемом контроллере. Я нашел грязный обходной путь, и если вы проигнорируете неидеальную проблему с анимацией, вы получите обратную кнопку с названием, которое вы хотите.
Трюк состоит в том, чтобы изменить заголовок первого VC в viewWillDisappear
и повторно установить его, конечно, в viewWillAppear
(Разумеется, по умолчанию, если нет leftBarButtonItem
set, UINavigationController
отобразит кнопку возврата с заголовком VC, который нажал текущий VC)
В VC, где вы нажимаете текущий VC, сделайте
-(void) viewWillDisappear:(BOOL) animated {
[super viewWillDisappear:animated];
self.title = @"Back";
}
-(void) viewWillAppear:(BOOL) animated {
[super viewWillAppear:animated];
self.title = @"Original Title";
}