2012-05-06 4 views
5

Я нашел great article, как добавить индикатор активности внутри кнопки Bar на панели навигации. Но я не могу повторить это в моем случае. Я добавил как панель навигации, так и UIBarButton в коде (не в nib), но я не смог найти элемент с именем UINavigationButton, чтобы включить индикатор активности внутри.Добавить UIActivityIndicatorView в UIBarButtonItem на UINavigationBar (iOS)

Я хочу, чтобы эта кнопка UIBarButtonItem видна:

enter image description here

И не так:

enter image description here

Кто-нибудь есть предложения, как сделать эту работу?

ответ

5

Грубая работа вокруг может быть что-то вроде этого:

act=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
[act setFrame:CGRectMake(14, 5, 20, 20)]; 
[act startAnimating]; 
rightButt=[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:self action:nil]; 
self.navigationItem.rightBarButtonItem=rightButt; 
if ([[self.navigationController.navigationBar subviews] count]>=2) { 
    //Be careful with the next line, Here you get access to an static index, 
    //Apple could change the structure of the navbar and your index may change in the future. 
    [[[self.navigationController.navigationBar subviews] objectAtIndex:2] addSubview:act];  

    } 

И вы получите это:

enter image description here

EDIT:
С вашего комментария i т кажется, что вы хотите добавить эту кнопку внутри UIToolbar, а не в UINavigationBar, это довольно то же самое:

UIActivityIndicatorView* act=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
[act setFrame:CGRectMake(10, 13, 20, 20)]; 
[act startAnimating]; 
UIBarButtonItem *rightButt=[[UIBarButtonItem alloc] initWithTitle:@"  " style:UIBarButtonItemStyleBordered target:self action:nil]; 
UIToolbar *tb=[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
[tb setBarStyle:UIBarStyleBlack]; 
[tb setItems:[NSArray arrayWithObjects:rightButt, nil]]; 
if ([[tb subviews] count]>=1) { 
    [[[tb subviews] objectAtIndex:1] addSubview:act];  
} 

и вы получите это:

enter image description here

+0

У меня есть эту кнопку внутри с другими кнопками, поэтому мне придется сделать другой шаг. Но, наверное, так оно и есть. Я попробую и дам вам знать. –

+0

К сожалению, это не работает, если UIBarButtonItem находится внутри UIToolbar ...!? –

+0

Нет, это внутри панели навигации. И это работает на моей машине, в чем проблема? – Mat

0

использовать кнопку и добавить индикатор активности, как подвид в нем

+0

Это не то, что я хочу , Я добавил дополнительное объяснение в свой вопрос. Проверьте это ... –

+0

ok это может быть сделано двумя апробациями, один помещает индикатор на бар и уменьшает альфа кнопки, чтобы индикатор частично отображался, а когда он отключен, индикатор будет полностью виден. – Saad

+0

2nd aproach состоит в том, чтобы добавить два индикатора: один за кнопкой на панели и один внутри кнопки в качестве подзаголовка, на этот раз не уменьшайте альфа кнопки, когда вы ее отключите, задняя индикация будет автоматически видна – Saad

Смежные вопросы