如何在导航栏中设置活动指示器?

问题描述 投票:43回答:12

我是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];
}

如何在导航栏中设置我的活动指示器?请帮帮我。谢谢。

iphone frame activity-indicator navigationbar
12个回答
78
投票

我在视图中添加了以下代码,我想在导航栏中显示活动指示器。

activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];

1
投票

我在这里有一个类似的问题回答:week

我想将导航栏中的刷新按钮更改为活动指示器,然后再返回。


1
投票

试试这个:@IBOutlet var btNavigaitonRight: UIBarButtonItem!


0
投票

我现在尝试使用它,而warrior提到的代码并没有完全正常工作。我不得不改变activityIndi​​cator的初始化:

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)
}

通过此更改,它应该按预期工作。


20
投票

SWIFT代码:

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()

13
投票

您正在此处创建一个新的活动指示器视图,这很好,但您不是指状态栏中的活动指示器。

要在状态栏中显示活动指示器,只需调用:

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

13
投票

这在Swift中对我有用:

let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView.init(activityIndicatorStyle: .White)
let refreshBarButton: UIBarButtonItem = UIBarButtonItem(customView: activityIndicator)
self.navigationItem.leftBarButtonItem = refreshBarButton
activityIndicator.startAnimating()

3
投票

在故事板上:在导航栏中创建BarButtonItem。添加视图是你的BarButtonItemActivityIndicator的儿子是你的View的儿子。


3
投票

像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
}

2
投票

谢谢!我的指标现在正在运作。

我正在为同伴们分享一个代码示例,将其置于上下文中。

- (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];
  }

2
投票

在Swift中,我做了以下事情:

启用:UIApplication.sharedApplication().networkActivityIndicatorVisible = true

禁用:UIApplication.sharedApplication().networkActivityIndicatorVisible = false


2
投票

迅速

  1. 将qazxsw poi从qazxsw poi连接到qazxsw poi
  2. 从其定义中删除UIBarButtonItem,如:storyboard
  3. 使用这些方法启动和停止活动指示器: yourViewController
© www.soinside.com 2019 - 2024. All rights reserved.