没有UITableViewController的情况下,下拉刷新UITableView不起作用。

3

我似乎找不到一个可行的解决方案。我已经尝试了其他可用的解决方案,以在没有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时隐藏它之外,我没有对tableView进行任何特殊处理。那可能会成为问题吗?
编辑:我更新了代码,包括“:”,但完全没有变化。我仍然看到圆圈旋转和文本“下拉以刷新”,但文本“what!”从未被打印出来。
override func viewDidLoad() {
    super.viewDidLoad()

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

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

Is there something else I should be doing?

3个回答

0

我曾经遇到同样的问题,但是我发现我的问题是由于tableview只显示了屏幕的一半 - 这意味着我没有足够的空间来拉动表格以触发刷新。

您可以尝试从滚动视图代理手动调用刷新 - 或许在那里检查内容偏移量.y并触发您的方法?


0
那是因为在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)
    }

1
我修改了以前的代码,加入了“:”,但是没有改变任何东西。我仍然看到从下拉菜单中的动画,但是文本“what!”从未被打印出来。 - josealvarado111
请使用我在答案中提供的准确代码,而不是你自己的代码。 - nachshon f
1
我尝试了你的代码,使用了func refresh(sender:UIRefreshControl)和func refresh(sender:AnyObject),但它仍然没有效果。 - josealvarado111

-1

你的原型并不完全适用于目标操作。该操作将发送方作为参数,并且你需要在选择器上加上一个:

@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!")
}

1
我更新了我的代码以完全匹配你给我的内容,但它没有任何效果。它仍然存在相同的问题,即“what!”从未被打印出来。 - josealvarado111
@user2492566 另一个建议是将刷新函数更改为使用 AnyObject,如答案中所编辑的,但不应该有任何影响。根据许多在线答案,您所拥有的似乎很常见。这种方法可能已经过时了。另一种选择是在容器视图中嵌入一个 UITableViewController,这将为您提供内置的下拉并仍允许您在主控制器中添加视图到表格周围。 - Rory McKinnel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接