#iphone #cocoa-touch #ios4
#iPhone #cocoa-touch #ios4
Вопрос:
Я создаю пользовательский UINavigationBar. Поскольку приложение должно работать на iOS 4, невозможно использовать новые параметры настройки, доступные на iOS 5.
Тем не менее, я подклассировал свой UINavigationBar, чтобы избежать категорий, которые работали очень хорошо, как показано на рисунке ниже.
Элементы UIBarButtonItems также не работают.
Я попытался создать подкласс класса UIBarButtonItem и переопределить метод drawRect, но ничего не изменилось.
CustomUIBarButtonItem *backButton = [[CustomUIBarButtonItem alloc] initWithTitle:@"Notícias" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
Затем я также попытался установить изображение ниже, но это также не сработало.
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"noticias_back.png"] style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
Итак, как я должен это сделать?
Комментарии:
1. чарльз. lescampeurs.org/2011/02/10 / … надеюсь, это будет полезно для вас
2. Вы когда-нибудь это понимали?
Ответ №1:
Я просто делаю что-то вроде…
UIButton *searchButton = [UIButton buttonWithType:UIButtonTypeCustom];
[searchButton setBackgroundImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal];
[searchButton setBackgroundImage:[UIImage imageNamed:@"search_pressed"] forState:UIControlStateHighlighted];
[searchButton addTarget:self action:@selector(selectedSearch) forControlEvents:UIControlEventTouchUpInside];
[searchButton setImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal];
[searchButton sizeToFit];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:searchButton];
Ответ №2:
Вы должны установить пользовательские кнопки, прежде чем нажимать на них или представлять их модально. Например:
ENPurchaseEditView *purchaseView = [[ENPurchaseEditView alloc] initWithNibName:@"ENPurchaseEditView" bundle:nil];
// customized left button to cancel - not back.
ENBarButtonImageItem *cancelBtn =
[[ENBarButtonImageItem alloc] initWithFrame:CGRectMake(0, 0, 29, 29)
image:[UIImage imageNamed:@"btn_cancel.png"]
backgroundImage:nil
target:purchaseView
action:@selector(cancel:)];
// setLeftBarButtonItem before you push or present.
// in this view, I also setHidesBackButton = YES in the init so my custom left
// shows up.
[[purchaseView navigationItem] setLeftBarButtonItem:cancelBtn];
[cancelBtn release];
// Edit purchase in full modal view.
// This could be a push - in my case I'm presenting a navController.
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:purchaseView];
[[self navigationController] presentModalViewController:navController animated:YES];
В моем случае ENBarButtonImageItem — это пользовательский UIBarButtonItem. Вот мой класс:
#import "ENBarButtonImageItem.h"
@implementation ENBarButtonImageItem
- (id)initWithFrame:(CGRect)frame
image:(UIImage*)image
backgroundImage:(UIImage*)bgImage
{
_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_button setFrame:frame];
self = [super initWithCustomView:_button];
if (self)
{
if (image)
[_button setImage:image forState:UIControlStateNormal];
if (bgImage)
[_button setBackgroundImage:bgImage forState:UIControlStateNormal];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
image:(UIImage*)image
backgroundImage:(UIImage*)bgImage
target:(id)target
action:(SEL)selector
{
self = [self initWithFrame:frame image:image backgroundImage:bgImage];
if (self)
{
[_button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (void)dealloc
{
[super dealloc];
[_button release];
}
- (void)addTarget:(id)target action:(SEL)selector forControlEvents:(UIControlEvents)controlEvents
{
[_button addTarget:target action:selector forControlEvents:controlEvents];
}
- (void)setImage:(UIImage *)image forState:(UIControlState)state
{
[_button setImage:image forState:state];
}
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state
{
[_button setImage:image forState:state];
}
@end