完全禁用UIRefreshControl - iOS

时间:2017-03-02 02:12:02

标签: ios swift uirefreshcontrol

我的桌面视图可以使用UIRefreshControl刷新。它工作正常。

当我点击UIRefreshControl按钮(Edit)时,我希望禁用UIBarButton。我在尝试完全禁用UIRefreshControl方面遇到了极大的困难。我已经知道我的表的内容肯定没有被刷新(这很好),但用户仍然能够下拉并显示spinny-symbol,然后简要显示。有什么方法可以隐藏这个spinny符号吗?

我尝试了很多东西:refreshControl.endRefreshing()refreshControl.isHidden = truerefreshControl.removeFromSuperview()refreshControl = nil ......

这是我的一些代码。 (isInEditMode是一个实例变量,在点击Edit时为true,在点击Done时为false。我相信这个布尔值设置正确,所以我不相信这是问题)。

func refreshTable(sender: UIRefreshControl) {

    if !isInEditMode {

        self.refreshControl.beginRefreshing()
        refreshProfile() 

    // this works exactly as I want it to

    }

    else {
        refreshControl.endRefreshing()
        // OR refreshControl.isHidden = true
        // OR refreshControl = nil
        // OR refreshControl.removeFromSuperview()

        // refreshProfile() not called, so table doesn't update, but the user can still pull down and the spinny icon shows. I do not want this. 
    }



}

编辑:我尝试了How do I "hide" a UIRefreshControl?中提出的所有解决方案,但没有一个解决了我的问题。可能是因为这篇文章很老了 - 2013年。 (或者因为我使用UIRefreshControl的方式有所不同。该帖子中提出的主要解决方案是在UIRefreshControl之后将nil设置为endRefreshing()。对我来说不起作用。我也尝试了建议将UIRefreshControl的色调设置为clear的hacky解决方案。并且如上所述,我还尝试了isHidden和{{1}区分我的帖子和其他帖子的另一个因素是Objective-C的所有答案,而我对Swift 3感兴趣。(虽然我很确定我能够将该线程上的建议翻译成Swift。这不是重点,因为它们都不适合我。)

1 个答案:

答案 0 :(得分:0)

在评论中的对话中,似乎答案是UIRefreshControl中的UITableView添加了多个viewDidAppear

视图控制器上的刷新控件属性是指添加的最新一个,并且可能正在被禁用。但是,表视图仍将保留任何以前添加的刷新控件,即使视图控制器不再具有对它们的引用。

修复方法是仅在viewDidLoad期间添加刷新控件并禁用它,但在切换到编辑模式时将其保留在表格视图中,以便在离开编辑模式时可以重新启用它。