刷新控制目标操作未触发

Suj*_*jal 6 uitabbarcontroller uinavigationcontroller tableview uirefreshcontrol swift

我的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------------")
}
Run Code Online (Sandbox Code Playgroud)

接下来,当我下拉tableview进行刷新时,刷新控件(设置为红色)可见.但是,不调用目标函数.

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

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

小智 7

我遇到了类似的问题,拉动刷新在 5.5" 屏幕上可以正常工作,但所有其他手机只会显示部分动画,然后永远不会完全触发刷新。

我发现refreshControl.didMoveToSuperview()viewDidAppear我的视图控制器中调用解决了这个问题。

如果我理解正确,则在设置时会调用相同的方法,tableView.refreshControl = refreshControl但需要在实际设置视图时重新计算。我需要再深入了解一下以确保具体细节,但希望这对暂时有所帮助。


小智 5

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

希望这对您有用。


Zah*_*rza 1

这是我在 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)
Run Code Online (Sandbox Code Playgroud)

希望,这对你有用!:-)