Как добавить несколько UIBarButton в UINavigationItem.rightBarButtonItem (или leftBarButtonItem)? - PullRequest
15 голосов
/ 12 сентября 2009

Я пробовал этот подход / взломать: http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/

Проблема в том, что это оставляет слабый шов. Я попытался установить фоновое изображение вложенной панели инструментов на изображение, которое я запечатлел. Это не сработало. Изображение не было применено. Я также пытался использовать вложенный UINavigationBar, но это не помогло.

Я видел это в нескольких приложениях для iPhone. Кто-нибудь знает как?

[EDIT] Я хочу, чтобы кнопки выглядели как обычные элементы UIBarButtonItem и могли использовать системные стили, например UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Ссылка, которую я предоставил, делает это, за исключением того, что вы можете видеть слабый шов, потому что это UIToolbar, вложенный в панель навигации ..

Пожалуйста, не упоминайте, что это нарушает принципы взаимодействия с человеком. (Мы знаем).

Я ценю, что вы внесли свой вклад в хаки ... это единственный способ сделать это!

Ответы [ 8 ]

36 голосов
/ 13 ноября 2011

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;
18 голосов
/ 03 ноября 2010

Я разместил код для добавления двух кнопок справа от панели навигации . Вы можете установить barStyle = -1 вместо подкласса UIToolbar.

6 голосов
/ 14 апреля 2010

Чтобы избавиться от фона ('seam') UIToolbar, создайте подкласс UIToolbar и переопределите метод (void) drawRect: (CGRect) Оставьте это поле пустым, и у вашего UIToolbar больше не будет фона.

Просто использовал это в моем собственном проекте и отлично работал. Нашел это в комментариях: http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

3 голосов
/ 12 сентября 2009
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];
2 голосов
/ 12 сентября 2009

см. Пример uicatalogue, доступный на сайте Apple бесплатно ... они использовали элемент управления uisegmented, чтобы показать три кнопки вместо правой кнопки на панели навигации ...

1 голос
/ 05 октября 2010

Я не могу комментировать, но в дополнение к @iworkinprogress мне пришлось установить цвет фона UIToolbar, чтобы очистить:

    [toolbar setBackgroundColor:[UIColor clearColor]];

Это также было найдено в комментариях http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html.

0 голосов
/ 13 декабря 2013

Я придумал вспомогательную функцию, которую я использую во всем проекте. По сути, он проверяет, есть ли уже кнопка на панели, и либо добавляет новую, либо объединяет ее с существующими кнопками. Таким образом, вы можете вызывать функцию только один или несколько раз:

+ (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)];
0 голосов
/ 02 ноября 2010

В iOS 4.x clearColor, похоже, не влияет на UIToolbar, тогда как переопределение его drawRect: did.

...