如何在导航栏中设置活动指示器?
Posted
技术标签:
【中文标题】如何在导航栏中设置活动指示器?【英文标题】:How to set the activity indicator in the navigation bar? 【发布时间】:2011-01-18 08:37:33 【问题描述】:我是 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];
如何在导航栏中设置我的活动指示器?请帮帮我。谢谢。
【问题讨论】:
【参考方案1】:我在视图中添加了下面的代码,我希望导航栏中的活动指示器。
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];
【讨论】:
我注意到在 ios 7 上你需要使用activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
否则指示器不会出现。【参考方案2】:
Swift 代码:
let activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let barButton = UIBarButtonItem(customView: activityIndicator)
self.navigationItem.setRightBarButton(barButton, animated: true)
activityIndicator.startAnimating()
【讨论】:
【参考方案3】:您在这里创建了一个新的活动指示器视图,这很好,但您不是指状态栏中的活动指示器。
要在状态栏中显示活动指示器,只需调用以下代码:
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
【讨论】:
我想在导航栏中显示活动指示器 我需要 Warrior 的解决方案,因为我隐藏了状态栏。当然不是说你的解决方案有什么问题!【参考方案4】:这在 Swift 中对我有用:
let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView.init(activityIndicatorStyle: .White)
let refreshBarButton: UIBarButtonItem = UIBarButtonItem(customView: activityIndicator)
self.navigationItem.leftBarButtonItem = refreshBarButton
activityIndicator.startAnimating()
【讨论】:
这在 10.1.1 中崩溃:libc++abi.dylib: 以 NSException 类型的未捕获异常终止 在 11.4 上运行没有任何问题。【参考方案5】:斯威夫特
-
将
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)
【讨论】:
【参考方案6】:在故事板上:在导航栏创建BarButtonItem
。
将 View 添加为 BarButtonItem
的儿子,将 ActivityIndicator
添加为 View
的儿子。
【讨论】:
是的,在 StoryBoard 上:将 BarButtonItem 拖到导航栏,现在将 UIView 拖到 BarButtonItem 的子视图,现在将 ActivityIndicator 拖到 UIView 的子视图。【参考方案7】:喜欢 WhatsApp:
//声明
let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
//ViewDidLoad
self.activityIndicator.hidesWhenStopped = true
func showIndicator()
self.navigationItem.titleView = self.activityIndicator
self.activityIndicator.isHidden = false
func hideIndicator()
self.navigationItem.titleView = nil
【讨论】:
【参考方案8】:谢谢!我的指标现在可以工作了。
我正在为其他菜鸟分享一个代码示例,以便将其放在上下文中。
- (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];
【讨论】:
【参考方案9】:在 Swift 中,我做了以下事情:
启用: UIApplication.sharedApplication().networkActivityIndicatorVisible = true
禁用: UIApplication.sharedApplication().networkActivityIndicatorVisible = false
【讨论】:
这会进入状态栏 你没有错。我误读了 OP - 抱歉。话虽如此,我发现这篇文章正在寻找有关如何解决在状态栏中显示网络活动指示器的问题的答案 - 希望我的答案仍然可以为某人提供一些帮助,如果不是对 OP。【参考方案10】:我有一个类似的问题,在这里回复: iphone - programatically change navigation bar button to activity indicator
我想将导航栏中的刷新按钮更改为活动指示器,然后再返回。
【讨论】:
【参考方案11】:试试这个:self.navigationItem.leftBarButtonItem.customView = your_view
【讨论】:
【参考方案12】:我现在尝试使用它,但战士提到的代码并不能完全按原样工作。我不得不改变activityIndicator的初始化:
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
通过此更改,它应该可以按预期工作。
【讨论】:
以上是关于如何在导航栏中设置活动指示器?的主要内容,如果未能解决你的问题,请参考以下文章
在 AppDelegate 中设置 UIButton 外观时如何更改 SafariViewController 中导航栏的色调