Как переопределить метод UIToolbar в более поздней версии iOS 4.2

Этот код прекрасно работает с iPad Simulator 4.2, но не с более поздней версией iOS4.3 или после нее. Я не могу переопределить методы класса UIToolbar.

@implementation UIToolbar (CustomImage)
- (void)drawRect:(CGRect)rect 
{
    UIImage *image = [[UIImage imageNamed:@"ToolBar.png"] retain];
    [image drawInRect:rect];
    [image release];    
}
 //return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize result = [super sizeThatFits:size];
    result.height = 80;
    return result;
};  

Какое альтернативное решение для этого? Пожалуйста, направьте меня. В более поздней версии..- (void)drawRect:(CGRect)rect никогда не вызывается.

При работе с iPad Simulator 4.2 код работает нормально, но с iPad Simulator 4.3 drawRect никогда не вызывался.

Ниже приведен скриншот панели инструментов:

2 ответа

Как насчет этого?

@implementation UIToolbar (UIToolbarCategory)
- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    if([self isMemberOfClass: [UIToolbar class]]){
        [super drawRect:rect];
        UIImage *image = [UIImage imageNamed:@"bar_gradient.png"];
        [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    }
}
@end

Вы реализуете его как категорию, вам нужно создать подкласс UIToolBar на основе журнала изменений iOS5

В бета-версии iOS 5 реализации UINavigationBar, UIToolbar и UITabBar изменились, поэтому метод drawRect: не вызывается для экземпляров этих классов, если он не реализован в подклассе.

Приложения, которые повторно реализовали drawRect: в категории любого из этих классов, обнаружат, что метод drawRect: не вызывается.

UIKit выполняет проверку ссылок, чтобы не вызывать метод в приложениях, связанных до iOS 5, но не поддерживает этот дизайн в iOS 5 или более поздней версии. Приложения могут:

  • Используйте API настройки для баров в iOS 5 и более поздних версиях, что является предпочтительным способом.
  • Подкласс UINavigationBar (или другие классы панелей) и переопределение drawRect: в подклассе.
Другие вопросы по тегам