2014-02-13 28 views
13

后纺我用UIRefreshControl在一个UITableView:UIRefreshControl站提出申请不活跃

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

随着刷新处理:

-(void)refresh { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     // (...some long running operation...) 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.refreshControl endRefreshing]; 
     }); 
    }); 
} 

在长时间运行的操作我使应用程序不活动按Home键。之后,我再次使应用程序处于活动状态。微调器冻结(停止旋转)并且无法将其返回到初始状态。

如何解决?

回答

17

我认为这是一个有点延迟的答案,但今天我看到了类似的问题在iOS 7,iOS 6的继续旋转,

这里是这个

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    if(self.refreshControl.isRefreshing) { 
     CGPoint offset = self.tableView.contentOffset; 
     [self.refreshControl endRefreshing]; 
     [self.refreshControl beginRefreshing]; 
     self.tableView.contentOffset = offset; 
    } 
} 

将停止和一点点的解决方法再次开始旋转,但它只发生在ios7我,所以也许你应该检查不这样做对iOS6的

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    if(self.refreshControl.isRefreshing && [[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
     CGPoint offset = self.tableView.contentOffset; 
     [self.refreshControl endRefreshing]; 
     [self.refreshControl beginRefreshing]; 
     self.tableView.contentOffset = offset; 
    } 
} 
5

这对我来说

01什么工作

夫特3和夫特4:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if self.refreshControl?.isRefreshing == true { 
     let offset = self.tableView.contentOffset 

     self.refreshControl?.endRefreshing() 
     self.refreshControl?.beginRefreshing() 
     self.tableView.contentOffset = offset 
    } 
} 

SWIFT 2.3:

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    if self.refreshControl?.refreshing == true { 
     let offset = self.tableView.contentOffset 

     self.refreshControl?.endRefreshing() 
     self.refreshControl?.beginRefreshing() 
     self.tableView.contentOffset = offset 
    } 
} 
+0

谢谢 - 这解决了它!但是:当动画停止时,桌面视图中有一个短暂的闪烁。似乎以某种方式内容偏移设置不正确。无论如何:它的工作原理也没有为我重设偏移量。 – beseder

+0

@beseder是否解决了闪烁问题? – 6axter82

0

这仍然是在iOS11一个问题。该解决方案需要修改一下,否则刷新控制将旋转太快

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    if(self.refreshControl.isRefreshing) { 
     CGPoint offset = self.tableView.contentOffset; 
     [self.refreshControl endRefreshing]; 

     // Delay the restart 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      [self.refreshControl beginRefreshing]; 
      self.tableView.contentOffset = offset; 
     }); 
    } 
}