#objective-c #ios
#objective-c #iOS
Вопрос:
Я создал категорию для UINavigationBar со следующим кодом:
// UINavigationBar MyNavigationBar.m
@interface UINavigationBar (MyNavigationBar)
@end
@implementation UINavigationBar (MyNavigationBar)
- (void)drawRect:(CGRect)rect
{
UIImage *img = [UIImage imageNamed: @"header.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Однако у меня нет #import нигде, ни в одном коде во всем моем проекте, эта категория все еще запущена и вставляет графический заголовок. Как это возможно?
Ответ №1:
Потому что вы включаете код в свое приложение при его компиляции. #import
просто делает текущий контекст ( .h
или .m
) осведомленным о методах в этой категории.
Любая категория, скомпилированная в ваше приложение, будет загружаться все время, пока ваше приложение работает.
Чтобы удалить категорию из добавления в вашу цель, удалите файл category .m из вашего приложения Target->Build Phase->Compile Sources
.
Предполагая, что вы хотите, чтобы НЕКОТОРЫЕ из ваших панелей навигации использовали этот код, но не ВСЕ из них, лучший способ сделать это, вероятно, подкласс UINavigationBar . (Кстати, вы захотите вызвать [super drawRect:rect]
свой подкласс)
Редактировать: альтернативный метод добавления изображения в UINavigationBar,
В любом контроллере представления, который вы хотите отобразить, просто добавьте self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"header.png"]] autorelease];
в viewWillAppear:
Комментарии:
1. «Любая категория, скомпилированная в ваше приложение, будет загружаться все время, пока ваше приложение работает». Приятно знать, спасибо!