存在活动指示器时,在后台禁用选择

tech_human

我在视图顶部添加活动指示器,并希望在活动指示器打开时在后台禁用选择。同样由于某种原因,在表格视图上显示数据后,我的活动指示器仍会旋转约30-45秒(取决于网络速度)。我为活动指标创建了一个类别。

活动指标类别代码:

- (UIView *)overlayView {
    return objc_getAssociatedObject(self, OverlayViewKey);
}

- (void)setOverlayView:(UIView *)overlayView {
    objc_setAssociatedObject(self, OverlayViewKey, overlayView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (void)showActivityIndicatorForView:(UIView *)view {
    self.overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    self.center = self.overlayView.center;
    [view setUserInteractionEnabled:NO];
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    [self.overlayView setUserInteractionEnabled:NO];
    [self startAnimating];
    [self.overlayView addSubview:self];
    [view addSubview:self.overlayView];
    [view bringSubviewToFront:self.overlayView];
    self.hidesWhenStopped = YES;
    self.hidden = NO;

}

- (void)hideActivityIndicatorForView:(UIView *)view {
    [self stopAnimating];
    [self.overlayView setUserInteractionEnabled:YES];
    [self.overlayView removeFromSuperview];
    [[UIApplication sharedApplication] endIgnoringInteractionEvents];
    [view setUserInteractionEnabled:YES];
}

表格视图控制器中的用法:

@interface MyTableViewController()
@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator;
@end

@implementation MyTableViewController
- (id) initWithSomething:(NSString *)something {
    self = [super init];

    if (self) {
        self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        self.activityIndicator.overlayView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    [self getDataServiceRequest];
    [self.activityIndicator showActivityIndicatorForView:self.navigationController.view];
}

- (void)requestCompletionCallBack sender:(ServiceAPI *)sender {
// Do something here with the data
    [self.activityIndicator hideActivityIndicatorForView:self.navigationController.view];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
}
@end

我在这里做错了什么?为什么在活动指示器打开时甚至在禁用用户交互之后,我仍然能够在后台选择数据。

邓肯

将您对hideActivityIndi​​catorForView的调用移至对的调用内dispatch_async(dispatch_get_main_queue()这是一个UI调用,需要在主线程上完成。

至于如何在视图控制器上禁用其他操作,您有一些选择。我做过的一件简单的事情就是将活动指示器放到固定在整个屏幕上的视图内,设置为opaque = false,并且颜色为黑色,alpha设置为0.5。这样,下面的内容是可见的,但用户无法单击它。您需要将插座添加到“ coveringView”并显示隐藏,而不是显示/隐藏活动指示器视图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用JSON在后台加载数组并在表视图中进行选择时,活动指示器不会消失

来自分类Dev

选择单元格后的活动指示器

来自分类Dev

隐藏活动指示器

来自分类Dev

显示活动指示器

来自分类Dev

iOS上下载图像时的活动指示器

来自分类Dev

当webView加载页面时如何停止活动指示器?

来自分类Dev

应用程序繁忙时显示活动指示器

来自分类Dev

React Native - FlatList 加载图像时的活动指示器

来自分类Dev

显示加载指示器时禁用所有触摸

来自分类Dev

在uiwebview上添加活动指示器

来自分类Dev

Cordova 3.1上的活动指示器

来自分类Dev

在UITableView的底部添加活动指示器?

来自分类Dev

Swift中的活动指示器

来自分类Dev

活动指示器视图未显示

来自分类Dev

在UIButton中显示活动指示器

来自分类Dev

在UIImageView中显示活动指示器

来自分类Dev

带循环的活动指示器

来自分类Dev

在UIImageView中显示活动指示器

来自分类Dev

活动指示器视图未显示

来自分类Dev

活动指示器未出现

来自分类Dev

Xamarin UWP循环活动指示器

来自分类Dev

活动指示器未正确加载

来自分类Dev

Bootstrap Carousel:禁用指示器

来自分类Dev

更改UIPickerView选择指示器的颜色

来自分类Dev

更改UIPickerView选择指示器的颜色

来自分类Dev

OnePage导航-使用一个排除的元素滚动时的活动指示器?

来自分类Dev

在Xamarin表单中加载View内容时显示活动指示器

来自分类Dev

网站在SwiftUI中加载时加载活动指示器

来自分类Dev

按NavigationItem按钮时,活动指示器未设置动画