UINavigationBar BarButtonItem с обычным стилем
я получил следующий код:
- (id)init {
if (self = [super init]) {
self.title = @"please wait";
UIBarButtonItem *favorite = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"star.png"] style:UIBarButtonItemStylePlain target:self action:@selector(buttonFavoriteClicked:)];
self.navigationItem.rightBarButtonItem = favorite;
}
return self;
}
но моя кнопка все еще выглядит как кнопка с UIBarButtonItemStyleBordered ![alt text]()
Есть ли способ установить кнопку с простым стилем в этой позиции?
Ответы
Ответ 1
Создайте UIButton в построителе интерфейса, сделайте его похожим на то, что вы хотите. Создайте розетку для входа в ваш .h:
IBOutlet UIButton * _myButton;
Затем установите его как элемент правой кнопки панели, используя пользовательский вид, который устранит границу:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_myButton];
Это работает, потому что UIButton является подклассом UIView.
Ответ 2
Попробуйте это вместо:
- (id)init {
if (self = [super init]) {
self.title = @"please wait";
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[button setImage:[UIImage imageNamed:@"star.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonFavoriteClicked) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *favorite = [[UIBarButtonItem alloc] initWithCustomView:button];
[button release];
self.navigationItem.rightBarButtonItem = favorite;
}
return self;
}
Надеюсь, что это поможет.
Ответ 3
Или сделать это в коде без IB:
// add setting button to nav bar
UIImage* settingsGearImg = [UIImage imageNamed:@"settings_gear.png"];
CGRect frameimg = CGRectMake(0, 0, settingsGearImg.size.width, settingsGearImg.size.height);
UIButton *settingsButton = [[UIButton alloc] initWithFrame:frameimg];
[settingsButton setBackgroundImage:settingsGearImg forState:UIControlStateNormal];
[settingsButton addTarget:self action:@selector(settingsButtonAction) forControlEvents:UIControlEventTouchUpInside];
[settingsButton setShowsTouchWhenHighlighted:YES];
UIBarButtonItem *settingButtonItem =[[UIBarButtonItem alloc] initWithCustomView:settingsButton];
self.navigationItem.leftBarButtonItem = settingButtonItem;
Результаты в:
![enter image description here]()
При использовании этого изображения значка (он белый на белом фоне, поэтому здесь не видно - ссылка: http://i.stack.imgur. ком /lk 5SB.png):
![enter image description here]()
Ответ 4
Это странно, но это работает. Скажите "Нет" изображениям/выходам! Вы даже не должны устанавливать свойство UIBarButtonItemStylePlain. Хитрость заключается в том, чтобы поместить кнопку в UIToolBar с некоторыми специальными атрибутами:
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Cool plain bar"];
UIToolbar *tools = [[UIToolbar alloc]
initWithFrame:CGRectMake(0.0f, 0.0f, 44.0f, 44.01f)];
tools.clipsToBounds = NO;
tools.barStyle = -1; // clear background
NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:1];
UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshTableView)];
[buttons addObject:bi];
[tools setItems:buttons animated:NO];
UIBarButtonItem *rightButtons = [[UIBarButtonItem alloc] initWithCustomView:tools];
item.rightBarButtonItem = rightButtons;
item.hidesBackButton = YES;
[myCoolNavigationBar pushNavigationItem:item animated:NO];
Ответ 5
Хотя Фрэнк прав, этот код должен быть в viewDidLoad
, проблема здесь в том, что выглядит BarButtons. Если вы хотите, чтобы он выглядел по-другому, вам нужно использовать другой тип UIView. Вы можете легко добавить UIButton в UIToolbar.
-(void)viewDidLoad {
[super viewDidLoad];
self.title = @"please wait";
self.navigationItem.rightBarButtonItem = [[[UIButton alloc] init] autorelease];
}
Edit:
Извините, вам нужен простой UIBarButtonItem. Я не думаю, что вы можете сделать это с помощью UINavigationBar. Вы можете попробовать добавить UserIteractionEnabled UILabel как rightBarButtonItem, я не уверен, что он будет работать или нет.
Похоже, в настоящее время это невозможно.
У sbwoodside есть решение.
Ответ 6
Почему бы не попробовать UI7Kit? Хорошо работает для меня, прост в использовании.
Ответ 7
UIImage *img = [UIImage imageNamed:@"white_star.png"];
CGSize itemSize = CGSizeMake(20, 20);
UIGraphicsBeginImageContext(itemSize);
CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
[img drawInRect:imageRect];
img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIBarButtonItem *barButton = [[UIBarButtonItem alloc ] initWithImage:img style:UIBarButtonSystemItemAdd target:self action:@selector(favoriteButtonClicked)];
barButton.style = UIBarButtonItemStyleBordered;
Ответ 8
Попробуйте это,
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"more.png"] style:UIBarButtonItemStylePlain target:self action:@selector(didPressButton)];