アクティビティインジケータがビューの上に追加されていて、アクティビティインジケータがオンのときにバックグラウンドで選択を無効にする必要があります。また何らかの理由で、データがテーブルビューに表示された後も、私の活動インジケータは約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
私はここで間違って何をしているのですか?アクティビティインジケータがオンになっているときや、ユーザー操作を無効にした後でも、バックグラウンドでデータを選択できるのはなぜですか。
それを修正するには、私を助けました。今度は私の活動インジケータが消え、すぐに画面上にデータが表示されます。これにより、データが画面に表示されている間にアクティビティインジケータがまだ回転しているというシナリオは表示されません。私は不透明なカバリングビューを追加するのをスキップできるはずだと思う。ありがとう@ダンカンC! –