【发布时间】:2010-12-15 17:27:06
【问题描述】:
如何将 UIActivityIndicatorView 微调器圈添加到 UIBarButton 中,以便当用户点击导航栏上的其中一个按钮时,他们会在加载时看到微调器?
【问题讨论】:
标签: iphone button uinavigationbar uiactivityindicatorview
如何将 UIActivityIndicatorView 微调器圈添加到 UIBarButton 中,以便当用户点击导航栏上的其中一个按钮时,他们会在加载时看到微调器?
【问题讨论】:
标签: iphone button uinavigationbar uiactivityindicatorview
如果您尝试在导航栏按钮中显示活动轮盘(例如,您的导航栏上可能有一个刷新按钮) - 您可以创建一个新的UIBarButtonItem,自定义视图为UIActivityIndicatorView:
Objective-C
uiBusy = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
uiBusy.hidesWhenStopped = YES;
[uiBusy startAnimating];
[self.navigationItem.rightBarButtonItem initWithCustomView:uiBusy];
斯威夫特
let uiBusy = UIActivityIndicatorView(activityIndicatorStyle: .White)
uiBusy.hidesWhenStopped = true
uiBusy.startAnimating()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: uiBusy)
这会用旋转轮覆盖您的rightBarButtonItem。完成后,只需重新创建 rightBarButtonItem。
【讨论】:
[self.navigationItem.rightBarButtonItem initWithCustomView:uiBusy]; 对我来说似乎很狡猾。根据@emotality 的回答,我希望self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:uiBusy];。
uiBusy.activityIndicatorViewStyle = .gray
private var uiBusy: UIActivityIndicatorView { if let busyView = self.navigationItem.rightBarButtonItem?.customView as? UIActivityIndicatorView { return busyView } else { let uiBusy = UIActivityIndicatorView(activityIndicatorStyle: .white) uiBusy.hidesWhenStopped = true uiBusy.activityIndicatorViewStyle = .gray self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: uiBusy) return uiBusy } }
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
在需要的地方放置以下内容:
[activityIndicator startAnimating];
[activityIndicator stopAnimating];
【讨论】:
实际上活动指示器并未添加为工具栏项。这是当前视图的子视图。
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[act setCenter:CGPointMake(20, 20)];
[act startAnimating];
[self.view addSubview:act];
记得在-(void)dealloc发布。
【讨论】:
使用这个方法
-(void)startAniatingActivityIndicator{
@try {
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.frame = CGRectMake(self.window.frame.size.width-30, 32.5, activityIndicator.bounds.size.width, activityIndicator.bounds.size.height);
[self.window addSubview:activityIndicator];
[activityIndicator startAnimating];
[self.window bringSubviewToFront:activityIndicator];
}
@catch (NSException *exception) {
}
@finally {
}
}
-(void)stopAniatingActivityIndicator{
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
activityIndicator = nil;
}
【讨论】:
UIActivityIndicatorView 是一种视图。将其框架设置在您的按钮内,并使用 -addSubview 将其添加到 UIBarButton 的视图层次结构中。
我过于简单化了,因为您必须尝试使其适合空间(可能通过缩放)并将其居中...
【讨论】:
伪代码,我不会在 Xcode 中检查这个,但这样的东西应该可以工作:
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] init];
act.frame = CGMakeRect(3,3,25,25);
[myBarButton addSubview:act];
[act release];
【讨论】:
UIBarButtonItem 不是UIView 子类,也没有addSubview:。您应该改用UIBarButtonItem *myBarButton = [[UIBarButtonItem alloc] initWithCustomView:act]; 或myBarButton.customView = act;。