Индивидуальная UINavigationbar в универсальном приложении - PullRequest
1 голос
/ 24 января 2011

У меня есть универсальное приложение, в котором я настраиваю свой 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 / рис / ok.png

Хотя это должно выглядеть примерно так:

http://awesome -apps.com / рис / nok.png

Кроме того, это повредит больше в моем приложении, но это должно быть именно для начала:)

Может ли кто-нибудь помочь мне с этим? Был ли у вас подобный опыт?

1 Ответ

4 голосов
/ 24 января 2011

Так игнорирует тот факт, что он вызывается при запуске в симуляторе iPad, потому что, как вы увидите через минуту, даже если вы использовали две разные категории (одна для iPhone, другая для iPad) у вас все еще будет эта проблема.

И вот почему:

Вы используете категорию для переопределения поведения UINavigationBar. Я предполагаю, что вы знаете, что это значит - крайне важно, чтобы любая и все панели навигации в вашем приложении будут использовать предоставленные вами методы в категории.

Это может вызвать проблемы, если вы используете стандартные элементы apple, которые используют UINavigationBars - именно то, что вы видите в контроллере popover. Происходит то, что UIPopoverController использует UINavigationBar. Но поскольку вы определили категорию, приложение предполагает, что вы хотите, чтобы всплывающая панель навигации также использовала эту категорию .

Так вот почему вы видите свое странное поведение в контроллере всплывающих окон.

Пока вы используете категории, у вас будет эта проблема, потому что вы не можете выборочно указать системе, какие столбцы должны использовать вашу категорию.

Я бы посоветовал вам точно сказать, что вы пытаетесь настроить в навигационной панели, потому что есть другие способы настройки вне категорий.

...