В моем приложении я хочу добавить индикатор активности в центр навигационной панели (название позиции). После того, как ответ веб-службы завершился, он должен заменить старый заголовок. В моем приложении есть 5 навигационных панелей. Когда я искал в google я получили несколько кодов, но они просто меняют левую или правую кнопку. Любая помощь?
Индикатор активности в центре панели навигации
Ответ 1
Вы используете свойство titleView элемента навигации, чтобы заменить заголовок панели навигации. Чтобы добавить индикатор активности, просто выполните следующее:
UIActivityIndicatorView *aiView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
aiView.hidesWhenStopped = NO; //I added this just so I could see it
self.navigationItem.titleView = aiView;
Если вы хотите удалить его и снова показать заголовок:
self.navigationItem.titleView = nil;
Ответ 2
Ответ pasqls работал хорошо для меня, я написал его быстрым
func showActivityIndicator() {
let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White)
activityIndicatorView.frame = CGRectMake(0, 0, 14, 14)
activityIndicatorView.color = UIColor.blackColor()
activityIndicatorView.startAnimating()
let titleLabel = UILabel.new()
titleLabel.text = "...Connecting"
titleLabel.font = UIFont.italicSystemFontOfSize(14)
let fittingSize = titleLabel.sizeThatFits(CGSizeMake(200.0, activityIndicatorView.frame.size.height))
titleLabel.frame = CGRectMake(activityIndicatorView.frame.origin.x + activityIndicatorView.frame.size.width + 8, activityIndicatorView.frame.origin.y, fittingSize.width, fittingSize.height)
let titleView = UIView(frame: CGRectMake(((activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width) / 2), ((activityIndicatorView.frame.size.height) / 2), (activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width), (activityIndicatorView.frame.size.height)))
titleView.addSubview(activityIndicatorView)
titleView.addSubview(titleLabel)
self.navigationItem.titleView = titleView
}
func hideActivityIndicator() {
self.navigationItem.titleView = nil
}
Ответ 3
Кроме того, если вы хотите добавить текстовую метку рядом с индикатором активности (как это сделано Apple в приложении настроек, например, в Facebook), вы можете сделать это:
- (void)showActivityIndicator
{
UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicatorView.frame = CGRectMake(0, 0, 22, 22);
activityIndicatorView.color = [UIColor blackColor];
[activityIndicatorView startAnimating];
UILabel *titleLabel = [UILabel new];
titleLabel.text = @"Creating Account";
titleLabel.font = [UIFont boldFlatFontOfSize:18];
CGSize fittingSize = [titleLabel sizeThatFits:CGSizeMake(200.0f, activityIndicatorView.frame.size.height)];
titleLabel.frame = CGRectMake(activityIndicatorView.frame.origin.x + activityIndicatorView.frame.size.width + 8,
activityIndicatorView.frame.origin.y,
fittingSize.width,
fittingSize.height);
UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(-(activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width)/2,
-(activityIndicatorView.frame.size.height)/2,
activityIndicatorView.frame.size.width + 8 + titleLabel.frame.size.width,
activityIndicatorView.frame.size.height)];
[titleView addSubview:activityIndicatorView];
[titleView addSubview:titleLabel];
self.navigationItem.titleView = titleView;
}
- (void)hideActivityIndicator
{
self.navigationItem.titleView = nil;
}