ObjectiveC Категория не импортируется, но все еще работает код

Я создал категорию для 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 только делает текущий контекст ( .h или .m ) осведомленным о методах в этой категории.

Любая категория, которая скомпилирована в ваше приложение, будет загружаться в любое время, пока приложение работает.

Чтобы удалить категорию из добавленной вами цели, удалите файл категории .m из Target->Build Phase->Compile Sources .

Предполагая, что вы хотите, чтобы некоторые из ваших навигационных панелей использовали этот код, но не ВСЕ, лучший способ сделать это, вероятно, для подкласса UINavigationBar. (Кстати, вы хотите назвать [super drawRect:rect] в вашем подклассе)

Изменить: альтернативный способ добавления изображения в UINavigationBar,

В любом контроллере просмотра вы хотите, чтобы изображение появилось, просто добавьте self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"header.png"]] autorelease]; для viewWillAppear:

  • Как отключить оповещение о местоположении системы в iOS-симуляторе
  • Предложение IF не подтверждает возврат функции NSString?
  • панель управления навигацией отключается
  • Отклонить 2 модальных контроллера
  • Надежная проверка того, попадает ли NSDate в заданный час, день или неделю
  • Почему NSURLConnection не достигает бэкэнда?
  • Ссылка, представляющая контроллер вида из модального (цель-с)
  • Почему я получаю целое число для ошибки преобразования указателя в объекте-c?
  • Как выглядит правильный вызов CGImageCreate, если поставщик данных для него использует массив, созданный приложением?
  • UITableViewDelegate и UITableViewDatasource путают
  • UIBarButtonItem с UIButton как CustomView - из UIButton, как получить доступ к UIBarButtonItem?
  • Давайте будем гением компьютера.