刷新控制目标动作未触发
Posted
技术标签:
【中文标题】刷新控制目标动作未触发【英文标题】:Refresh control target action not triggered 【发布时间】:2018-04-09 04:39:29 【问题描述】:我的 viewcontroller 有一个 tableview,我在其中填充不同部分的视图。我正在尝试向此 tableview 添加刷新控件。我实现的内容如下。
func setUpRefreshControl()
let refreshControl = UIRefreshControl()
refreshControl.tintColor = UIColor.red
refreshControl.addTarget(self, action: #selector(handleRefresh(_: )), for: UIControlEvents.valueChanged)
if #available(ios 10.0, *)
tableView.refreshControl = refreshControl
else
tableView.addSubview(refreshControl)
@objc func handleRefresh(_ sender: UIRefreshControl)
print("-----------REFRESHED------------")
接下来,当我拉下 tableview 进行刷新时,刷新控件(设置为红色)是可见的。但是,没有调用目标函数。
我的视图控制器位于标签栏控制器内,该控制器嵌入在导航控制器中。我猜这个问题与视图层次结构有关,因为当我在没有导航栏和标签栏的单独项目中尝试相同的代码时,它工作正常。但我无法弄清楚当前的问题是什么。有什么解决这个问题的建议吗?谢谢。
编辑: 我在不同的模拟器中测试过:6、6s、6s+、7、7+、8、8+、X。我发现上面的代码在所有 plus 版本中运行良好包括 X。但是,所有的模拟器都在运行 ios 11.2,所以我仍然无法弄清楚是什么导致了这个问题。
【问题讨论】:
如果您能看到红色的刷新控件,我认为这里的视图层次结构没有问题。您可以尝试让该刷新控件属性全局检查 您可以取消选中顶部栏并调整情节提要中的自动滚动视图插图也可以尝试 不起作用@PrashantTukadiya,我尝试将刷新控件设为全局并尝试更改滚动内容插图 【参考方案1】:我遇到了类似的问题,拉动刷新在 5.5 英寸屏幕上可以正常工作,但所有其他手机只会显示部分动画,然后永远不会触发刷新。
我发现在 viewDidAppear
中为我的视图控制器调用 refreshControl.didMoveToSuperview()
解决了这个问题。
如果我理解正确,当您设置 tableView.refreshControl = refreshControl
时会调用相同的方法,但在视图实际设置为出现时需要重新计算。我需要进一步挖掘以确保具体细节,但希望这暂时会有所帮助。 ?
【讨论】:
这是为我做的【参考方案2】:我解决了这个问题,将 Simulated Metrics 中的 Size 属性更改为 Inferred,并将视图控制器中的 Simulated Size 属性更改为 Fixed。
我希望这对你有用。
【讨论】:
【参考方案3】:这是我实施的刷新控制代码,它在我当前的项目中为我工作,就在 3 天前。
var refreshControl: UIRefreshControl!
这是我的全局 refreshControl
变量,下面是它的实现。
//MARK: - REFRESH CONTROLLER VIEW
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: #selector(refresh(_ :)), for: UIControlEvents.valueChanged)
refreshControl.attributedTitle = NSAttributedString(string: "")
tblRequest.addSubview(refreshControl)
希望,这对你有用! :-)
【讨论】:
以上是关于刷新控制目标动作未触发的主要内容,如果未能解决你的问题,请参考以下文章