插入新行

时间:2018-05-24 19:07:22

标签: ios swift uitableview uirefreshcontrol

我有一个UITableView,在添加新项目的UIViewController的委托上,插入行。该行被正确插入。

但是,在此之后拖动UIRefreshControl时,UITableView上的UITableView不会消失。

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)

如果我没有先去另一个视图而不是在尝试拉动刷新之前再回来,它总是会永远停止旋转。

编辑: 看起来UIRefreshControl在我添加帖子后不再调用目标函数。

有关为何可能发生这种情况的任何想法?如何解决?

2 个答案:

答案 0 :(得分:1)

确保在用户撤消刷新之前未调用from project.app.models import model1,model2,...。如果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中的refreshControl.beginRefreshing(),则会调用选择器:

viewDidAppear

答案 1 :(得分:0)

尝试将UIRefreshControl分配到refreshControl的{​​{1}}属性,如下所示:

UITableView

请注意,这需要iOS 10.0或更高版本,但我们很快就会获得iOS 12.0,因此我认为您不应该支持iOS低于10.0