0

这当然没什么,但我遇到了一个没有立即显示的 UIView 的麻烦。

这是代码:

SettingViewController.m

- (IBAction)reloadParametersDB:(id)sender {
    LoadingView* loadingView = [LoadingView loadLoadingIntoView:self.view];
    [dbService fillParametersTables];
    [loadingView removeLoading];
}

LoadingView.m

+(LoadingView *)loadLoadingIntoView:(UIView *)superView{
    LoadingView *loadingView = [[LoadingView alloc] initWithFrame:superView.bounds];
    if (loadingView == nil) return nil;
    loadingView.backgroundColor = [UIColor blackColor];
    [superView addSubview:loadingView];
    return loadingView;
}

它之所以有效,是因为当我在 loadLoadingIntoView 中打印某些内容时,我看到了它,实际上问题是 addSubview 在完成 fillParametersTables 后才有效...

有谁知道该怎么做?

谢谢 !

4

1 回答 1

1

您需要返回事件循环才能更新显示。一种方法是在将加载视图设置为他们自己的方法后将这些行放入它们自己的方法中,然后使用performSelector:withObject:afterDelay:它来执行它。

例如:

- (void)doTableLoading:(id)loadingView {
    [dbService fillParametersTables];
    [(LoadingView *)loadingView removeLoading];
}

- (IBAction)reloadParametersDB:(id)sender {
    LoadingView* loadingView = [LoadingView loadLoadingIntoView:self.view];
    [self performSelector:@selector(doTableLoading:) withObject:loadingView afterDelay:0.1f]
}

(这段代码是在 HTML 表单中编写的,甚至可能无法编译……但它应该可以让您了解策略。)

于 2012-11-20T17:08:58.457 回答