完全禁用 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 = true
、refreshControl.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 解决方案。并且,如上所述,我还尝试了isHidden
和removeFromSuperview()
。将我的帖子与其他帖子区分开来的另一个因素是所有这些Objective-C 的答案,而我对 Swift 3 很感兴趣。(虽然我很确定我能够将该线程上的建议翻译成 Swift。不过这无关紧要,因为它们都不适合我。)
【问题讨论】:
sender.isUserInteractionEnabled = false
没用 :( 这是一个非常奇怪的情况。
我想说,如果从视图中删除 UIRefreshControl
不起作用,那么那里有一些魔法
@mlecoz 首先,您是在 UIViewController 中使用 UITableViewController 还是 UITableView? 第二,如果您将 refreshcontrol 设置为 = nil ,它如何工作? 第三,你是不是通过代码添加了refreshcontrol?如果是这样,你在哪里添加的?我想知道?我已经删除了重复的标志,因为这似乎是您的代码的问题。
如果您在viewWillAppear
中添加它,您肯定可以拥有多个刷新控件。您只需要在viewDidLoad
中添加它,并且在您完成编辑后想要将其添加回来。
【参考方案1】:
从 cmets 中的对话看来,答案似乎是多个UIRefreshControl
s 被添加到viewDidAppear
中的UITableView
。
视图控制器上的刷新控制属性是指最新添加的属性,并且该属性可能已被正确禁用。但是,任何以前添加的刷新控件仍将由表视图保留,即使视图控制器不再引用它们。
修复是在viewDidLoad
期间仅添加一次刷新控件并禁用它,但在切换到编辑模式时将其保留在表格视图中,以便在离开编辑模式时可以重新启用它。
【讨论】:
以上是关于完全禁用 UIRefreshControl - iOS的主要内容,如果未能解决你的问题,请参考以下文章
无法覆盖“UIRefreshControl”类型的可变属性“refreshControl”?具有协变类型“UIRefreshControl”