【问题标题】:Customized UINavigationbar in Universal AppUniversal App中自定义的UINavigationbar
【发布时间】:2011-01-24 17:33:02
【问题描述】:

我有一个通用应用程序,我可以在其中自定义 UINavigationBar。 在我的 iPhone AppDelegate 中,我使用它来实现它:

@implementation UINavigationBar (CustomImage)


static NSMutableDictionary *navigationBarImages = NULL;

- (void)initImageDictionary
{
 if(navigationBarImages==NULL){
    navigationBarImages=[[NSMutableDictionary alloc] init];
 }   
}

- (void)drawRect:(CGRect)rect
{

NSLog(@"drawing navbar2");
UIImage *imageName=[navigationBarImages objectForKey:[NSValue valueWithNonretainedObject: self]];
if (imageName==nil) {
    imageName=[UIImage imageNamed:@"bg_titleBar.png"];

UIImage *image = imageName;
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
}



- (void)setMyImage:(UIImage*)image
{

[navigationBarImages setObject:image forKey:[NSValue valueWithNonretainedObject: self]];
    [self setNeedsDisplay];
}

@end

现在我的问题是:为什么会调用这段代码,尽管我启动了 iPad 模拟器?

更重要的是,它似乎破坏了 UIPopoverController,因为它看起来像这样:

http://awesome-apps.com/pic/ok.png

虽然它应该看起来像这样:

http://awesome-apps.com/pic/nok.png

除了它在我的应用程序中损坏更多,但对于初学者来说应该是这样 :)

谁能帮我解决这个问题?你有过类似的经历吗?

【问题讨论】:

  • 添加:我刚刚意识到,实际上一切都很好,但是 Popover 的框架让它看起来有点奇怪。有没有办法自定义弹出框或删除它?

标签: iphone uinavigationcontroller customization uipopovercontroller


【解决方案1】:

所以忽略当你在 iPad 模拟器中运行时它会被调用的事实,因为你马上就会看到,即使你使用了两个不同的类别(一个用于 iPhone,一个用于 iPad ) 你还是会遇到这个问题。

原因如下:

您正在使用类别来覆盖 UINavigationBar 行为。我假设您知道这意味着什么 - 至关重要的是,您应用中的任何和所有导航栏都将使用您在类别中提供的方法。

如果您使用使用 UINavigationBars 的标准苹果元素,这可能会导致问题 - 您在弹出框控制器中看到的确切内容。发生的事情是 UIPopoverController 使用了 UINavigationBar。但是因为您已经定义了一个类别,所以应用假定您希望弹出式导航栏也使用该类别

这就是为什么您会在弹出式控制器中看到奇怪的行为。

只要您使用类别,您就会遇到这个问题,因为您无法选择性地告诉系统哪些栏应该使用您的类别。

我建议您确切地告诉我们您正在尝试在导航栏中进行自定义,因为还有其他方法可以在类别之外实现自定义。

【讨论】:

  • 感谢您的洞察力,尽管我在想,这将取决于设备。您认为可行的方法是什么。我正在使用类别,因为它们工作得又快又好。在我的应用程序中,一些 Bars 需要一张图片,另一些则需要 2 张图片。 iPad 上的情况有时会有所不同......
猜你喜欢
  • 2015-11-26
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 2017-07-05
  • 2016-11-30
相关资源
最近更新 更多