Ios UIRefreshControl在插入新行后永远旋转
我有一个Ios UIRefreshControl在插入新行后永远旋转,ios,swift,uitableview,uirefreshcontrol,Ios,Swift,Uitableview,Uirefreshcontrol,我有一个UITableView,它在添加新项的UIViewController的委托上插入行。正确插入该行 但是,在此之后拖动UITableView时,UITableView上的UIRefreshControl不会消失 extension FeedViewController: AddPostDelegate { func didAddPost(_ userPost: UserPost) { self.postsWrapper?.posts.insert(PostWrap
UITableView
,它在添加新项的UIViewController
的委托上插入行。正确插入该行
但是,在此之后拖动UITableView
时,UITableView上的UIRefreshControl
不会消失
extension FeedViewController: AddPostDelegate {
func didAddPost(_ userPost: UserPost) {
self.postsWrapper?.posts.insert(PostWrapper(type: PostType.user(userPost)), at: 0)
self.tableView.beginUpdates()
self.tableView.insertRows(at: [
IndexPath(row: 1, section: 0)
], with: .automatic)
self.tableView.endUpdates()
self.refresher.endRefreshing()//Does nothing
}
}
在viewDidLoad
中:
refresher = UIRefreshControl()
tableView.addSubview(refresher)
refresher.addTarget(self, action: #selector(didDragScrollView), for: .valueChanged)
refresher.layer.zPosition = -1//otherwise in front of the header cell when refreshing (iOS 9.2)
如果我不先转到另一个视图,而不是在尝试拉刷新之前返回,它总是永远挂起
编辑:
在我添加post后,UIRefreshControl
似乎不再调用目标函数
你知道为什么会发生这种情况吗?如何解决此问题?尝试将您的
UIRefreshControl
分配到UITableView
的refreshControl
属性中,如下所示:
if #available(iOS 10.0, *) {
tableView.refreshControl = refresher
} else {
tableView.addSubview(refresher)
}
请注意,这需要iOS 10.0或更高版本,但我们很快就会推出iOS 12.0,因此我认为您不应该支持低于10.0的iOS。请确保在用户拉刷新之前未调用
beginRefreshing()
。如果refreshControl.isRefreshing
为true
,则不会调用选择器“拉入刷新”
一个简单的测试:
let refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
refreshControl.addTarget(self, action: #selector(ViewController.refreshData), for: .valueChanged)
tableView.refreshControl = refreshControl
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// sets refreshControl.isRefreshing to true
// before the user initiates it
refreshControl.beginRefreshing()
}
然后用户拉刷新。因为refreshControl.isRefreshing
为true
选择器将不会被调用。如果在viewdide
中删除refreshControl.beginRefreshing()
,将调用选择器:
@objc func refreshData() {
print("refresh initiated")
refreshControl.endRefreshing()
}
与你的问题无关的评论。您正在将刷新控件添加为子视图,如果您需要的话,这非常好。但是如果您不知道,有一个
UITableView
(UIScrollView
)属性refreshControl
,可以开箱即用。@AuRis只有10.0或更高版本,因此出于某种原因,对于支持用户,仍然低于该属性-那么您不能使用它。根据我的应用程序的用户统计,iOS上仍有大约8%的用户9@KaylaGalway如果您指的是DispatchQueue.main.async,那么是的,我试过了that@daredevil1234当然,如果您仍然支持iOS 9,这是有意义的。关于刷新,您是通过“拉动刷新”操作启动它,还是在某处调用refresher.beginRefreshing()
?@AuRis我实际上是拉动刷新的。在添加帖子之前,刷新可以正常工作,但在添加帖子之后,刷新不能正常工作。根据im调试结果,RefreshControl似乎不再调用其“目标函数”,之后您是否尝试使用UITableViewController
而不是在UIViewController
中放置UITableView
?