Как установить индикатор активности в панели навигации?
-
21-09-2019 - |
Вопрос
Я новичок в разработке iPhone.Я хочу установить индикатор активности на панели навигации.Я вижу индикатор своей активности под панелью навигации.Мой код здесь
- (IBAction) gomethod : (id) sender {
xxMapSubviewcontroller = [[XxMapSubviewcontroller alloc] init];
[self.navigationController pushViewController:xxMapSubviewcontroller animated:YES];
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.frame = CGRectMake(0.0, 0.0, 20.0, 20.0);
[activityIndicator startAnimating];
[xxMapSubviewcontroller.view addSubview:activityIndicator];
}
Как я могу установить индикатор активности на панели навигации?Пожалуйста, помогите мне.Спасибо.
Решение
Я добавляю приведенный ниже фрагмент кода в представление, где мне нужен индикатор активности на панели навигации.
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];
Другие советы
Свифт-код:
let activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let barButton = UIBarButtonItem(customView: activityIndicator)
self.navigationItem.setRightBarButtonItem(barButton, animated: true)
activityIndicator.startAnimating()
Здесь вы создаете новое представление индикатора активности, и это нормально, но вы не имеете в виду индикатор активности в строке состояния.
Чтобы отобразить индикатор активности в строке состояния, просто вызовите это:
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
Это сработало для меня в Swift:
let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView.init(activityIndicatorStyle: .White)
let refreshBarButton: UIBarButtonItem = UIBarButtonItem(customView: activityIndicator)
self.navigationItem.leftBarButtonItem = refreshBarButton
activityIndicator.startAnimating()
В раскадровке: Создавать BarButtonItem
на панели навигации.Добавьте View, чтобы стать сыном вашего BarButtonItem
и ActivityIndicator
быть сыном твоего View
.
Как WhatsApp:
//Объявляем
let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
//ПросмотрDidLoad
self.activityIndicator.hidesWhenStopped = true
func showIndicator() {
self.navigationItem.titleView = self.activityIndicator
self.activityIndicator.isHidden = false
}
func hideIndicator() {
self.navigationItem.titleView = nil
}
Спасибо!Мой индикатор теперь работает.
Я делюсь примером кода для новичков, чтобы представить это в контексте.
- (void)viewDidLoad
// custom button images
UIImage *customImage = [UIImage imageNamed:@"menu24"];
UIImage *customImage2 = [UIImage imageNamed:@"search24"];
UIImage *customImage3 = [UIImage imageNamed:@"back24"];
// These are linked in my story board to Navigation Item
[self customiseBarBtnItem:[self menu_button]
customImage:customImage selector:@selector(menuPressed:)];
[self customiseBarBtnItem:[self search_button]
customImage:customImage2 selector:@selector(searchPressed:)];
[self customiseBarBtnItem:[self backButton]
customImage:customImage3 selector:@selector(backPressed:)];
//initialize the activity indicator - as @antf comment suggests for ios7
UIActivityIndicatorView *actInd=[[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
//store it as a property on the view controller
self.activityIndicator = actInd;
// this sets up activity indicator
UIBarButtonItem *progress_indicator = [[UIBarButtonItem alloc]
initWithCustomView:[self activityIndicator]];
// link custom buttons AND activity indicator in desired order to navigation bar
self.navigationItem.rightBarButtonItems =
[NSArray arrayWithObjects:
self.menu_button,
self.search_button,
progress_indicator,
nil];
// Для полноты картины: вот как я программно показываю/скрываю кнопку «Назад»
if ( bShowBack == YES )
self.navItemBar.leftBarButtonItem = self.backButton;
else
self.navItemBar.leftBarButtonItem = Nil;
// Я использую свой индикатор активности с UIWebView, поэтому запускаю его следующим образом
- (void)webViewDidStartLoad:(UIWebView *)webView
{
[[self activityIndicator] startAnimating];
}
- (void)didFailLoadWithError:(UIWebView *)webView
didFailLoadWithError:(NSError *)error
{
[[self activityIndicator] stopAnimating];
}
- (void)webViewDidFinishLoad:(UIWebView *) webView
{
[[self activityIndicator] stopAnimating];
}
В Swift я сделал следующее:
Давать возможность: UIApplication.sharedApplication().networkActivityIndicatorVisible = true
Запрещать: UIApplication.sharedApplication().networkActivityIndicatorVisible = false
Быстрый
- Коннет
UIBarButtonItem
отstoryboard
кyourViewController
- удалять
week
из его определения, например:@IBOutlet var btNavigaitonRight: UIBarButtonItem!
Используйте эти методы для запуска и остановки индикатора активности:
var activityIndicator = UIActivityIndicatorView() func startBarButtonIndicator() { activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 20, height: 20)) activityIndicator?.color = .gray let barButton = UIBarButtonItem(customView: activityIndicator!) self.navigationItem.setRightBarButton(barButton, animated: true) activityIndicator?.startAnimating() } func stopBarButtonIndicator() { activityIndicator?.stopAnimating() navigationItem.setRightBarButton(btNavigaitonRight, animated: true) }
У меня был аналогичный вопрос с ответом здесь:iphone – программно изменить кнопку панели навигации на индикатор активности
Я хотел изменить кнопку обновления на панели навигации на индикатор активности и обратно.
попробуй это : self.navigationItem.leftBarButtonItem.customView = your_view
Я попытался использовать его сейчас, но код, упомянутый воином, не работал так, как есть.Мне пришлось изменить инициализацию ActivityIndicator:
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
С этим изменением все должно работать так, как ожидалось.