Как добавить UIBarButtonItem программно?

Каков правильный способ добавления UIBarButtonItem программно? В моем случае я пытаюсь добавить его к rightBarButtonItem, и я перескакивал по иерархии контроллера, но я не могу заставить кнопку отображаться где угодно.

Вот мой текущий код:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.navigationItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithImage:[[UIImage alloc] initWithContentsOfFile:@"Barcode-White.png"] style:UIBarButtonItemStylePlain target:self action:@selector(scanEquipment:)] autorelease]];
}

Я надеюсь, что кто-то сможет вести меня в правильном направлении. Контроллер, с которого я пытаюсь вызвать это, состоит из 3 уровней. Итак, UITabBarControllerUIViewController (Settings, 1st level)UIViewController (Vehicle, 2nd level)UIViewController (Inventory, 3rd level).

В любом случае, спасибо за любую помощь!

Ответы

Ответ 1

[[UIImage alloc] initWithContentsOfFile:@"Barcode-White.png"], вероятно, не будет работать. initWithContentsOfFile принимает полный путь к файлу изображения, а не только имя файла. Это, вероятно, проблема; он возвращает nil, что приводит к тому, что весь конструктор кнопок возвращает nil.

(Кроме того, вы пропустите это изображение, вызвав метод init без выпуска или автозагрузки.)

Попробуйте [UIImage imageNamed:@"Barcode-White"] вместо этого, который ищет файл изображения в ресурсах приложения и имеет дополнительный бонус только для загрузки изображения один раз, а затем кэширования его в памяти независимо от того, сколько раз он вызывал:

http://developer.apple.com/library/ios/documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/occ/clm/UIImage/imageNamed:

Кроме того, похоже, что он должен работать...

Кроме того, элементы навигационной панели всегда имеют стиль UIBarButtonItemStyleBordered. Попытка установить его на UIBarButtonItemStylePlain будет игнорироваться системой. (Но не должно быть причиной, по которой он не работает.)