Как добавить несколько UIBarButton в UINavigationItem.rightBarButtonItem(или leftBarButtonItem)?
Я пробовал этот подход/взломать:
http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/
Проблема в том, что это оставляет слабый шов. Я попытался установить фоновое изображение вложенной панели инструментов на изображение, которое я захватил, каким он должен быть. Это не сработало. Изображение не было применено. Я также пробовал использовать вложенный UINavigationBar и, похоже, не работал.
Я видел это в нескольких приложениях для iPhone. Кто-нибудь знает, как?
[EDIT] Я хочу, чтобы кнопки выглядели как обычные UIBarButtonItems и могли использовать системные стили, такие как UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Ссылка, которую я предоставил, делает это, за исключением того, что вы видите слабый шов, потому что это UIToolbar, вложенный в панель навигации.
Пожалуйста, не упоминайте об этом нарушении Руководства по человеческому интерфейсу. (Мы знаем).
Я ценю, что вы вносите свои хаки... это единственный способ сделать это!
Ответы
Ответ 1
Чтобы избавиться от фона ( "шов" ) UIToolbar, создайте подкласс UIToolbar и переопределите метод (void) drawRect: (CGRect) rect. Оставьте это поле пустым, и ваш UIToolbar больше не будет иметь фона.
Просто использовал это в своем собственном проекте и отлично работал. Нашел это в комментариях: http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html
Ответ 2
iOS 5.0 теперь поддерживает несколько кнопок. См. Документацию iOS для UINavigationItem. В частности, следующее:
Свойства:
@property(nonatomic, copy) NSArray *leftBarButtonItems;
@property(nonatomic, copy) NSArray *rightBarButtonItems;
@property BOOL leftItemsSupplementBackButton;
Методы:
- (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated;
- (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated;
Ответ 3
Я разместил код, чтобы добавить две кнопки справа от navigationBar. Вы можете установить barStyle = -1
вместо подкласса UIToolbar
.
Ответ 4
UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)];
// make UIView customView1... (UILabel, UIButton, etc.) with desired frame and settings
[parentView addSubview:customView1];
[customView1 release];
// make UIView customView2... (UILabel, UIButton, etc.) with desired frame and settings
[parentView addSubview:customView2];
[customView2 release];
UIBarButtonItem *customBarButtomItem = [[UIBarButtonItem alloc] initWithCustomView:parentView];
[parentView release];
self.navigationItem.rightBarButtonItem = customBarButtomItem;
[customBarButtomItem release];
Ответ 5
см. пример uicatalogue, доступный на сайте Apple бесплатно... они использовали uisegmented control, чтобы показать три кнопки вместо кнопки правого бара на навигационной панели...
Ответ 6
Я не могу комментировать, но в дополнение к @iworkinprogress мне пришлось установить цвет фона UIToolbar:
[toolbar setBackgroundColor:[UIColor clearColor]];
Это также было найдено в комментариях http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html.
Ответ 7
В iOS 4.x clearColor, похоже, не влияет на UIToolbar, тогда как переопределение его drawRect: did.
Ответ 8
Я придумал вспомогательную функцию, которую я использую по всему моему проекту. В основном это проверяет, есть ли уже кнопка на панели, и либо добавьте новую, либо объедините ее с существующими кнопками. Таким образом, вы можете вызвать функцию только один или несколько раз:
+ (void)AddButtonToBar:(UIViewController *)controller withImage:(NSString *)imageName withAction:(SEL)action withFrame:(CGRect) frame{
UIButton *newButton =[[UIButton alloc] init];
[newButton setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
newButton.frame = frame;
[newButton addTarget:controller action:action forControlEvents:UIControlEventTouchUpInside];
if ([[controller.navigationItem rightBarButtonItems] count] == 0)
[controller.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:newButton]];
else {
NSMutableArray *existingButtons = [[NSMutableArray alloc] initWithArray:[controller.navigationItem rightBarButtonItems]];
[existingButtons addObject:[[UIBarButtonItem alloc] initWithCustomView:newButton]];
[controller.navigationItem setRightBarButtonItems:(NSArray *)existingButtons];
}
}
Вызовите его из контроллера вида:
[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)];