完全禁用 UIRefreshControl - iOS

Completely disabling UIRefreshControl - iOS

我有一个 table 视图,可以用 UIRefreshControl 刷新。它工作正常。

问题是我希望在单击 Edit 按钮(即 UIBarButton)时禁用 UIRefreshControl。我在尝试完全禁用 UIRefreshControl 时遇到了极大的困难。我已经到了我的 table 的内容肯定不会被刷新的地步(这很好),但用户仍然能够下拉并显示 spinny-symbol,然后短暂显示。有什么方法可以隐藏这个旋转符号吗?

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

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

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? 中提出的所有解决方案,其中 none 解决了我的问题。可能是因为 post 已经很老了--2013 年。 (或者因为我使用 UIRefreshControl 的方式有所不同。post 中提出的主要解决方案是在 [=27 之后将 UIRefreshControl 设置为 nil =]。这对我不起作用。我还尝试了将 UIRefreshControl 的色调设置为 clear 的 hacky 解决方案。并且,如上所述,我还尝试了 isHiddenremoveFromSuperview()。将我的 post 与另一个 post 区分开来的另一个因素是 Objective-C 的所有这些答案,而我对 Swift 3.(尽管我很确定我能够将该线程上的建议翻译成 Swift。不过这不是重点,因为其中 none 对我有用。)

从评论中的对话来看,答案似乎是多个 UIRefreshControl 被添加到 viewDidAppear 中的 UITableView

视图控制器上的刷新控件 属性 指的是最新添加的控件,并且该控件可能已被正确禁用。但是,任何以前添加的刷新控件仍将由 table 视图保留,即使视图控制器不再引用它们。

解决方法是在 viewDidLoad 期间仅添加一次刷新控件并禁用它,但在切换到编辑模式时将其保留在 table 视图中,以便在离开编辑模式。