【问题标题】: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];
}

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

【问题讨论】:

    标签: iphone frame activity-indicator navigationbar


    【解决方案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】:

      斯威夫特

      1. UIBarButtonItemstoryboard 连接到yourViewController
      2. 从其定义中删除week,如:@IBOutlet var btNavigaitonRight: UIBarButtonItem!
      3. 使用这些方法来启动和停止活动指示器:

        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 的子视图,现在将 ActivityIndi​​cator 拖到 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】:

                我现在尝试使用它,但战士提到的代码并不能完全按原样工作。我不得不改变activityIndi​​cator的初始化:

                activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
                

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-08-15
                  • 1970-01-01
                  • 2016-05-27
                  相关资源
                  最近更新 更多