刷新控制目标操作未触发

时间:2018-04-09 04:39:29

标签: swift uinavigationcontroller tableview uitabbarcontroller uirefreshcontrol

我的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进行刷新时,刷新控件(设置为红色)可见。但是,不会调用目标函数。

我的viewcontroller位于标签栏控制器内,该控制器嵌入在导航控制器中。我想这个问题与视图层次结构有关,因为当我在没有导航栏和标签栏的单独项目中尝试相同的代码时,它的工作正常。但我无法弄清楚当前的问题是什么。解决这个问题的任何建议?谢谢。

编辑:我在不同的模拟器中测试过它:6,6s,6s +,7,7 +,8,8 +,X。我发现上面的代码在所有加号版本中运行良好包括X.但是,所有模拟器都在运行ios 11.2,所以我仍然无法弄清楚可能导致此问题的原因。

3 个答案:

答案 0 :(得分:5)

我解决了这个问题,在视图控制器中将“模拟量度”中的“属性大小”更改为“推断”,将“模拟量”属性更改为“固定”。

我希望这对您有用。

答案 1 :(得分:2)

我遇到了类似的问题,在5.5英寸的屏幕上,拉动刷新效果很好,但是所有其他手机只会显示部分动画,然后再也不会触发刷新。

我发现在refreshControl.didMoveToSuperview()中为视图控制器调用viewDidAppear解决了该问题。

如果我理解正确,那么在您设置tableView.refreshControl = refreshControl时会调用相同的方法,但是需要在实际设置视图时重新计算。我需要进一步挖掘细节以确保细节,但希望暂时对此有所帮助。

答案 2 :(得分:0)

这是我实施的刷新控制代码,仅在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)

希望,这适合你! : - )