完全禁用 UIRefreshControl - iOS
Completely disabling UIRefreshControl - iOS
我有一个 table 视图,可以用 UIRefreshControl
刷新。它工作正常。
问题是我希望在单击 Edit
按钮(即 UIBarButton
)时禁用 UIRefreshControl
。我在尝试完全禁用 UIRefreshControl
时遇到了极大的困难。我已经到了我的 table 的内容肯定不会被刷新的地步(这很好),但用户仍然能够下拉并显示 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? 中提出的所有解决方案,其中 none 解决了我的问题。可能是因为 post 已经很老了--2013 年。 (或者因为我使用 UIRefreshControl
的方式有所不同。post 中提出的主要解决方案是在 [=27 之后将 UIRefreshControl
设置为 nil
=]。这对我不起作用。我还尝试了将 UIRefreshControl
的色调设置为 clear
的 hacky 解决方案。并且,如上所述,我还尝试了 isHidden
和removeFromSuperview()
。将我的 post 与另一个 post 区分开来的另一个因素是 Objective-C 的所有这些答案,而我对 Swift 3.(尽管我很确定我能够将该线程上的建议翻译成 Swift。不过这不是重点,因为其中 none 对我有用。)
从评论中的对话来看,答案似乎是多个 UIRefreshControl
被添加到 viewDidAppear
中的 UITableView
。
视图控制器上的刷新控件 属性 指的是最新添加的控件,并且该控件可能已被正确禁用。但是,任何以前添加的刷新控件仍将由 table 视图保留,即使视图控制器不再引用它们。
解决方法是在 viewDidLoad
期间仅添加一次刷新控件并禁用它,但在切换到编辑模式时将其保留在 table 视图中,以便在离开编辑模式。
我有一个 table 视图,可以用 UIRefreshControl
刷新。它工作正常。
问题是我希望在单击 Edit
按钮(即 UIBarButton
)时禁用 UIRefreshControl
。我在尝试完全禁用 UIRefreshControl
时遇到了极大的困难。我已经到了我的 table 的内容肯定不会被刷新的地步(这很好),但用户仍然能够下拉并显示 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? 中提出的所有解决方案,其中 none 解决了我的问题。可能是因为 post 已经很老了--2013 年。 (或者因为我使用 UIRefreshControl
的方式有所不同。post 中提出的主要解决方案是在 [=27 之后将 UIRefreshControl
设置为 nil
=]。这对我不起作用。我还尝试了将 UIRefreshControl
的色调设置为 clear
的 hacky 解决方案。并且,如上所述,我还尝试了 isHidden
和removeFromSuperview()
。将我的 post 与另一个 post 区分开来的另一个因素是 Objective-C 的所有这些答案,而我对 Swift 3.(尽管我很确定我能够将该线程上的建议翻译成 Swift。不过这不是重点,因为其中 none 对我有用。)
从评论中的对话来看,答案似乎是多个 UIRefreshControl
被添加到 viewDidAppear
中的 UITableView
。
视图控制器上的刷新控件 属性 指的是最新添加的控件,并且该控件可能已被正确禁用。但是,任何以前添加的刷新控件仍将由 table 视图保留,即使视图控制器不再引用它们。
解决方法是在 viewDidLoad
期间仅添加一次刷新控件并禁用它,但在切换到编辑模式时将其保留在 table 视图中,以便在离开编辑模式。