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];
});
答
更明智的办法来解决这个问题,将结束/开始分别刷新上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()
}
}
奇妙的想法!让我帮你获得比我更多的点数:-)谢谢! –
这实际上是错误的。如果没有收到API调用的成功呢?如果您足够快地执行了制表符切换,则可以观察到刷新控制在调用成功块之前结束刷新。这导致最终用户的误解。 – GoGreen