6

У меня есть контроллер вида, который запускает сетевой запрос async, когда пользователь нажимает кнопку, а затем выталкивает другой контроллер после завершения запроса. В это промежуточное время я хочу, чтобы на панели навигации отображался индикатор активности, поэтому пользователь знает, что он извлекает данные. У меня есть этот код в IBAction для кнопки:Добавление индикатора активности на панель навигации

self.activityIndicator = [[UIActivityIndicatorView alloc] 
    initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhite]; 
    // I've tried Gray, White, and WhiteLarge 
[self.activityIndicator startAnimating]; 
self.activityIndicator.hidden = NO; 
UIBarButtonItem* spinner = [[UIBarButtonItem alloc] initWithCustomView: self.activityIndicator]; 
self.navigationItem.rightBarButtonItem = spinner; 

Индикатор не отображается, но этот код вызывается. Я просмотрел другие сообщения по этой теме, и они говорят, чтобы сделать именно это. Поток пользовательского интерфейса не отображается во время вызова (я могу нажать другие кнопки и перейти к другому пути во время ожидания). Я что-то упустил?

+0

Какая у вас панель навигации? – Avt

ответ

2

я решил.

Там была кнопка отмены, которая уходила, когда клавиатура делала это. Код, который удалил кнопку отмены, не волновала, удаляла ли она кнопку или мой счетчик. Я переместил код spinner в более позднее расположение, и все хорошо.

0

У меня возникли проблемы с отображением UIBarButtonItem, если он уже существует в этом месте. Если дело обстоит именно так попробовать:

self.navigationItem.rightBarButtonItem = nil; 
self.navigationItem.rightBarButtonItem = spinner; 
0

Вы также можете попытаться установить элемент кнопки бара, как это (если цель, по крайней мере IOS 5):

self.navigationItem.rightBarButtonItems = @[spinner]; 
Смежные вопросы