Как переопределить метод UIToolbar с более поздней версией iOS 4.2 - PullRequest
0 голосов
/ 14 сентября 2011

Этот код прекрасно работает с 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 in никогда не вызывается.

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

enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 25 октября 2011

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

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

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

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

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

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

@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
...