【问题标题】:Add UIActivityIndicatorView into UIBarButton将 UIActivityIndi​​catorView 添加到 UIBarButton
【发布时间】:2010-12-15 17:27:06
【问题描述】:

如何将 UIActivityIndi​​catorView 微调器圈添加到 UIBarButton 中,以便当用户点击导航栏上的其中一个按钮时,他们会在加载时看到微调器?

【问题讨论】:

    标签: iphone button uinavigationbar uiactivityindicatorview


    【解决方案1】:

    如果您尝试在导航栏按钮中显示活动轮盘(例如,您的导航栏上可能有一个刷新按钮) - 您可以创建一个新的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
    • 我使用计算属性访问uiBusy: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 } }
    【解决方案2】:
    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    activityIndicator.hidesWhenStopped = YES;
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
    

    在需要的地方放置以下内容:

    [activityIndicator startAnimating];
    [activityIndicator stopAnimating];
    

    【讨论】:

      【解决方案3】:

      实际上活动指示器并未添加为工具栏项。这是当前视图的子视图。

      UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; [act setCenter:CGPointMake(20, 20)]; [act startAnimating]; [self.view addSubview:act];

      记得在-(void)dealloc发布。

      【讨论】:

      【解决方案4】:

      使用这个方法

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

      }

      【讨论】:

        【解决方案5】:

        UIActivityIndi​​catorView 是一种视图。将其框架设置在您的按钮内,并使用 -addSubview 将其添加到 UIBarButton 的视图层次结构中。

        我过于简单化了,因为您必须尝试使其适合空间(可能通过缩放)并将其居中...

        【讨论】:

          【解决方案6】:

          伪代码,我不会在 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;
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多