Как переопределить метод 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: в подклассе.