【问题标题】:Pull to refresh UITableView without UITableViewController is not working在没有 UITableViewController 的情况下拉刷新 UITableView 不起作用
【发布时间】:2015-09-04 15:36:35
【问题描述】:

我似乎找不到可行的解决方案。我已经尝试了其他可用的解决方案来在没有 UITableViewController 的 UITableView 中实现拉取刷新,但没有任何反应。

这是相关代码:

@IBOutlet weak var tableView: UITableView!
var peopleRefreshControl:UIRefreshControl!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    peopleRefreshControl = UIRefreshControl()
    peopleRefreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    peopleRefreshControl.addTarget(self, action: "refresh", forControlEvents: .ValueChanged)
    // I also tried this
    // peopleRefreshControl.addTarget(self, action: Selector("refresh"), forControlEvents: .ValueChanged)
    tableView.addSubview(peopleRefreshControl)

}

func refresh(){
    println("what!")
}

当我下拉时,我可以看到圆圈旋转和“拉动刷新”文本,但从未调用函数“刷新”。我究竟做错了什么?还有什么我应该做的吗?除了在不使用时隐藏它之外,我没有对 tableView 做任何特别的事情。这会不会是个问题?

编辑:我更新了代码以包含“:”,如下所示,但绝对没有任何变化。我仍然看到圆圈旋转和文字“拉动刷新”,但文字“什么!”永远不会打印出来。

override func viewDidLoad() {
    super.viewDidLoad()

    ...
    peopleRefreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
    ...
}

func refresh(sender:UIRefreshControl){
    println("what!")
}

还有什么我应该做的吗?

【问题讨论】:

    标签: ios swift uitableview cocoa-touch pull-to-refresh


    【解决方案1】:

    那是因为你没有在viewDidLoad的refresh后面加一个“:”。 没有它,刷新功能将无法运行。 尝试使用此代码...

    var refreshControl:UIRefreshControl!
    
      override func viewDidLoad()
        {
            super.viewDidLoad()
    
            self.refreshControl = UIRefreshControl()
            self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    
    //look at the : after "refresh" 
            self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
    
    
            self.tableView.addSubview(refreshControl)
        }
    

    【讨论】:

    • 我修改了我之前的代码以包含“:”,但它没有改变任何东西。我仍然从下拉菜单中看到动画,但文本“什么!”永远不会打印出来
    • 在我的答案中使用我上面的确切代码,而不是你的代码。
    • 我用 func refresh(sender:UIRefreshControl) 和 func refresh(sender:AnyObject) 试过你的代码,但还是没有效果
    【解决方案2】:

    我遇到了同样的问题,但是我发现我的问题是由于 tableview 位于屏幕的中间 - 这意味着我没有足够的空间来拉动桌子以触发它。

    您可以尝试从滚动视图委托手动调用刷新 - 也许检查内容 offset.y 并在那里触发您的方法?

    【讨论】:

      【解决方案3】:

      您的原型并不完全适合目标操作。该操作将发送者作为参数,您需要在选择器上使用:

      @IBOutlet weak var tableView: UITableView!
      var peopleRefreshControl:UIRefreshControl!
      
      override func viewDidLoad() {
          super.viewDidLoad()
      
          // Do any additional setup after loading the view.
      
          peopleRefreshControl = UIRefreshControl()
          peopleRefreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
          peopleRefreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
          tableView.addSubview(peopleRefreshControl)
        }
      
      func refresh(sender:AnyObject){
          println("what!")
      }
      

      【讨论】:

      • 我更新了我的代码以完全匹配您给我的内容,但它没有任何效果。它仍然有同样的问题,“什么!”永远不会打印出来
      • @user2492566 唯一的其他建议是更改刷新功能以使用答案中编辑的 AnyObject,但不应该有所作为。根据网上的许多答案,您所拥有的似乎很常见。这种方法可能不再有效。另一种方法是将 UITableViewController 嵌入到容器视图中,这将为您提供内置的下拉菜单,并且仍然允许您在主控制器中的表格周围添加视图。
      猜你喜欢
      • 2012-05-04
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多