Luc*_*uca 40 iphone objective-c
我想UIBarButtonItem用a 替换我的(用于刷新)UIActivityIndicatorView,当刷新完成后,我想转回刷新按钮并删除UIActivityIndicatorView.
Tom*_*ing 50
只需创建两个不同的UIBarButtonItems
一个用于活动指示符,另一个用于正常的UIBarButtonItem.
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[activityView sizeToFit];
[activityView setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)];
UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:activityView];
[self.navigationItem setRightBarButtonItem:loadingView];
[loadingView release];
[activityView release];
UIBarButtonItem * normalButton = [[UIBarButtonItem alloc] initWithTitle...];
[self.navigationItem setRightBarButtonItem:normalButton];
[normalButton release];
Run Code Online (Sandbox Code Playgroud)
如果要切换它们,只需将其重新分配rightBarButtonItem给任何一个.
Nas*_*uig 10
这对我有用:
- (void) rightItemButtonWithActivityIndicator
{
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicator startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[activityIndicator release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];
}
Run Code Online (Sandbox Code Playgroud)
使用Swift 4 Xcode 9时,我需要在进行网络操作时暂时将Refresh替换为BarButtonItem一个ActivityIndicator,然后重新启用该按钮。这是我的解决方案:
class ViewController: UIViewController {
var activityIndicator = UIActivityIndicatorView()
var refreshBarButton = UIBarButtonItem()
var activityBarButton = UIBarButtonItem()
override func viewDidLoad() {
super.viewDidLoad()
activityIndicator.sizeToFit()
activityIndicator.color = self.view.tintColor
activityBarButton = UIBarButtonItem.init(customView: activityIndicator)
refreshBarButton = UIBarButtonItem(barButtonSystemItem: .refresh, target: self, action: #selector(refreshBarButtonPressed))
showRefreshButton()
}
func performNetworkOperation(completion: @escaping(Bool)->()) {
//simulate network operation
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(3), execute: {
completion(true)
})
}
@objc func refreshBarButtonPressed() {
showActivityIndicator()
activityIndicator.startAnimating()
performNetworkOperation { (result) in
//completion
self.activityIndicator.stopAnimating()
self.showRefreshButton()
}
}
func showRefreshButton() {
self.navigationItem.setRightBarButton(refreshBarButton, animated: true)
}
func showActivityIndicator() {
self.navigationItem.setRightBarButton(activityBarButton, animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我试图做同样的事情,我认为设置self.navigationItem.rightBarButtonItem不起作用,因为活动指示器不会显示.事实证明它工作正常,我只是看不到它,因为我有一个白色导航栏,默认的UIActivityIndicatorView样式也是白色.所以它在那里,但看不见.灰色风格我现在可以看到它.
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
Run Code Online (Sandbox Code Playgroud)
(杜).
| 归档时间: |
|
| 查看次数: |
11105 次 |
| 最近记录: |