临时显示其他选项卡时 UIRefreshControl 冻结(iOS 7)
Posted
技术标签:
【中文标题】临时显示其他选项卡时 UIRefreshControl 冻结(iOS 7)【英文标题】:UIRefreshControl freezes when temporarily showing other tab (iOS 7) 【发布时间】:2014-03-24 23:16:16 【问题描述】:我的一个标签上有以下内容:
- (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];
下拉表时刷新控件开始正常旋转。
但是,当我在它旋转时显示另一个选项卡然后返回时,刷新控件停止旋转。
知道为什么吗?
【问题讨论】:
【参考方案1】:尝试将这段代码从viewDidLoad
移动到viewWillAppear
:
//### Workaround: http://***.com/a/19126113/1971013
dispatch_async(dispatch_get_main_queue(), ^
[self.refreshControl beginRefreshing];
[self.refreshControl endRefreshing];
);
【讨论】:
好主意!让我帮你得到比我更多的分数 :-) 谢谢! 这实际上是错误的。如果尚未收到 API 调用成功怎么办?如果您足够快地切换选项卡,您可以观察到刷新控件在调用成功块之前结束刷新。这会导致最终用户的误解。【参考方案2】:解决此问题的更明智的方法是分别在 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()
【讨论】:
以上是关于临时显示其他选项卡时 UIRefreshControl 冻结(iOS 7)的主要内容,如果未能解决你的问题,请参考以下文章
使用 SwiftUI 的 TabbedView 切换到其他选项卡时查看内容不显示
如何使 jQuery UI 选项卡在激活选项卡时执行“显示:flex”而不是“显示:阻止”?