Вам нужно создать подкласс вместо создания категории.
Я не совсем уверен, почему категория работает для UINavigationBar
, но не UIToolbar
, но для них обоих работает подкласс, и я думаю, что это более стандартный способ настройки подобных вещей.
Чтобы создать подкласс UIToolbar
, создайте класс с именем MyToolbar
(или что-то подобное) и поместите его в .h:
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface MyToolbar : UIToolbar {}
- (void)drawRect:(CGRect)rect;
@end
И это в файле .m:
#import "MyToolbar.h"
@implementation MyToolbar
- (void)drawRect:(CGRect)rect {
backgroundImage = [UIImage imageNamed:@"my-awesome-toolbar-image.png"];
[backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Оттуда вы должны указать навигационному контроллеру использовать MyToolbar
вместо UIToolbar
. Самый простой способ, который я нашел, это выбрать свой контроллер навигации в Интерфейсном Разработчике, а затем в Инспекторе Атрибутов установить флажок «Показывать панель инструментов». Панель инструментов должна отображаться в окне NavigationController
. Нажмите на него, а затем в инспекторе идентичности измените класс на MyToolbar
.