2009-09-12 1 views
15

я попробовал этот подход/хак: http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/Как вы добавляете несколько UIBarButton в UINavigationItem.rightBarButtonItem (или leftBarButtonItem)?

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

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

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

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

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

+0

Ссылки вы упомянули вниз :-( –

ответ

6

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

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

+2

FYI, iOS 5.0 поддерживает несколько кнопок навигационной панели. См. Ответ, который я разместил ниже. Однако, если вам нужно развернуть старые версии ОС, вам все равно придется использовать технику, описанную в этом ответе. –

2

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

+0

К сожалению, я не ищу я хочу стандартные кнопки, такие как + (добавить кнопку), Изменить, обновить значок и т. д. – Cal

+0

вы можете добавить пользовательское представление с помощью нужных кнопок ... искать google для пользовательского кода просмотра. быть в состоянии получить его –

+0

есть много учебников по сети, чтобы сделать это. Если вы пробовали отправить свой код –

3
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]; 
+0

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

+0

Ответ alex работает для вас отлично –

+0

Я пробовал это раньше, и кнопка выглядит по-другому. Но вы можете сделать снимок экрана, который хотите, и использовать его в кнопке. – Cal

0

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

36

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; 
0

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

+ (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)];