完全禁用 UIRefreshControl - iOS

Posted

技术标签:

【中文标题】完全禁用 UIRefreshControl - iOS【英文标题】:Completely disabling UIRefreshControl - iOS 【发布时间】:2017-03-02 02:12:02 【问题描述】:

我有一个可以用UIRefreshControl 刷新的tableview。它工作正常。

问题是我希望在单击Edit 按钮(即UIBarButton)时禁用UIRefreshControl。我在尝试完全禁用 UIRefreshControl 时遇到了极大的困难。我已经达到了我的表格内容肯定没有被刷新的地步(这很好),但用户仍然能够下拉并显示 spinny-symbol,然后短暂显示。有什么办法可以隐藏这个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? 中提出的所有解决方案,但都没有解决我的问题。可能是因为那个帖子很老了——2013年。 (或者因为我使用UIRefreshControl 的方式有所不同。该帖子中提出的主要解决方案是在endRefreshing() 之后将UIRefreshControl 设置为nil。这对我不起作用。我也尝试了建议将UIRefreshControl 的色调设置为clear 的hacky 解决方案。并且,如上所述,我还尝试了isHiddenremoveFromSuperview()。将我的帖子与其他帖子区分开来的另一个因素是所有这些Objective-C 的答案,而我对 Swift 3 很感兴趣。(虽然我很确定我能够将该线程上的建议翻译成 Swift。不过这无关紧要,因为它们都不适合我。)

【问题讨论】:

sender.isUserInteractionEnabled = false 没用 :( 这是一个非常奇怪的情况。 我想说,如果从视图中删除 UIRefreshControl 不起作用,那么那里有一些魔法 @mlecoz 首先,您是在 UIViewController 中使用 UITableViewController 还是 UITableView? 第二,如果您将 refreshcontrol 设置为 = nil ,它如何工作? 第三,你是不是通过代码添加了refreshcontrol?如果是这样,你在哪里添加的?我想知道?我已经删除了重复的标志,因为这似乎是您的代码的问题。 如果您在viewWillAppear 中添加它,您肯定可以拥有多个刷新控件。您只需要在viewDidLoad 中添加它,并且在您完成编辑后想要将其添加回来。 【参考方案1】:

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

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

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

【讨论】:

以上是关于完全禁用 UIRefreshControl - iOS的主要内容,如果未能解决你的问题,请参考以下文章

工作拉动以禁用反弹刷新

UIRefreshControl 闪烁

Swift - 在刷新控件中禁用默认重新加载表视图

无法覆盖“UIRefreshControl”类型的可变属性“refreshControl”?具有协变类型“UIRefreshControl”

下面的 UIRefreshControl 块视图

使用 UIRefreshControl