我在其中一个标签上有以下内容:
- (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://stackoverflow.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];
}
}
当拉下桌子时,刷新控制开始正常旋转。
但是,当我旋转,很快显示另一个标签然后返回时,刷新控制停止旋转。
知道为什么吗?
答案 0 :(得分:4)
尝试将这段代码从viewDidLoad
移至viewWillAppear
:
//### Workaround: http://stackoverflow.com/a/19126113/1971013
dispatch_async(dispatch_get_main_queue(), ^
{
[self.refreshControl beginRefreshing];
[self.refreshControl endRefreshing];
});
答案 1 :(得分:1)
解决此问题的更明智的方法是分别在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()
}
}