UIRefreshControl冻结时临时出现在我的标签之一,我有以下其他选项卡(适用于iOS 7)

问题描述:

:下拉表时UIRefreshControl冻结时临时出现在我的标签之一,我有以下其他选项卡(适用于iOS 7)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.clearsSelectionOnViewWillAppear = YES; 

    UIRefreshControl* refreshControl = [[UIRefreshControl alloc] init]; 
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Sync"]; 
    [refreshControl addTarget:self 
         action:@selector(refresh:) 
      forControlEvents:UIControlEventValueChanged]; 
    self.refreshControl = refreshControl; 

    //### Workaround: http://*.com/a/19126113/1971013 
    dispatch_async(dispatch_get_main_queue(),^
    { 
     [self.refreshControl beginRefreshing]; 
     [self.refreshControl endRefreshing]; 
    }); 
} 

- (void)refresh:(id)sender 
{ 
    if ([Settings sharedSettings].haveAccount == YES) 
    { 
     [[DataManager sharedManager] synchronizeWithServer:^(NSError* error) 
     { 
      [sender endRefreshing]; 
     }]; 
    } 
    else 
    { 
     [sender endRefreshing]; 
    } 
} 

刷新控制开始旋转正常。

但是,当我旋转时,很快显示另一个选项卡,然后返回,刷新控制停止旋转。

任何想法为什么?

尝试这段代码从viewDidLoad移动到viewWillAppear

//### Workaround: http://*.com/a/19126113/1971013 
dispatch_async(dispatch_get_main_queue(),^
{ 
    [self.refreshControl beginRefreshing]; 
    [self.refreshControl endRefreshing]; 
}); 
+0

奇妙的想法!让我帮你获得比我更多的点数:-)谢谢! –

+1

这实际上是错误的。如果没有收到API调用的成功呢?如果您足够快地执行了制表符切换,则可以观察到刷新控制在调用成功块之前结束刷新。这导致最终用户的误解。 – GoGreen

更明智的办法来解决这个问题,将结束/开始分别刷新上viewWillDisappear/viewWillAppear中

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    refreshControl.endRefreshing() 
} 

override func viewWillAppear(_ animated: Bool) { 

    super.viewWillAppear(animated) 

    if isLoadingData { 
     // for simplicity using harcoded height for refresh control 
     tableView.setContentOffset(CGPoint(x: 0, y: -60), animated: false) 
     refreshControl.beginRefreshing() 
    } 
}