如何使用更高版本的iOS 4.2覆盖工具栏方法

时间:2011-09-14 06:59:35

标签: iphone custom-controls uitoolbar iphone-sdk-3.2 iphone-sdk-4.1

此代码适用于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模拟器4.2代码运行正常,但从未调用过iPad模拟器4.3 drawRect。

以下是工具栏的屏幕截图:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

@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

答案 1 :(得分:1)

您将其作为一个类别实现,您需要根据iOS5更改日志继承UIToolBar

  

在iOS 5测试版中,UINavigationBar,   UIToolbar和UITabBar实现已经改变了   drawRect:方法不会在这些类的实例上调用,除非它   在子类中实现。

     

已重新实施drawRect的应用:在其中任何一个类别中   类会发现没有调用drawRect:方法。

     

UIKit会进行链接检查,以防止在应用中调用该方法   在iOS 5之前链接但在iOS 5或iOS上不支持此设计   后来。应用可以:

     
      
  • 对iOS 5及更高版本中的条形图使用自定义API,这是首选方式。
  •   
  • 子类UINavigationBar(或其他bar类)并覆盖子类中的drawRect:。
  •