uirefreshControl与程序化的UITableView没有UITableViewController

时间:2014-09-27 05:12:05

标签: swift refresh tableview

我以编程方式创建了我的UITableView实例,并将其作为子视图添加到根视图中。我还以编程方式为表视图实例设置了delegate和dataSource。所以这个表视图没有表视图控制器。现在我想让表视图能够下拉刷新。我从谷歌学到了一些代码,如下:

var refresh = UIRefreshControl();
refresh.attributedTitle = NSAttributedString(string: "Pull to refresh");
refresh.addTarget(self, action: "refresh", forControlEvents:.ValueChanged);
self.refreshControl = refresh;

现在,问题是self引用了表视图控制器。但是,在这种情况下,我没有表视图控制器。那么我是否必须创建一个表视图控制器才能实现下拉刷新功能?

1 个答案:

答案 0 :(得分:8)

您可以通过以下方式执行此操作:

// 1:向ViewController添加一个实例变量。

let refreshControl = UIRefreshControl()

// 2:在viewDidLoad()中设置刷新控件

refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: "refresh", forControlEvents: UIControlEvents.ValueChanged)

// 3:并且(仍在viewDidLoad()中)将其作为子视图添加到tableView(UITableView)

tableView.addSubview(refreshControl)

// 4:最后,在你的refresh()函数中:不要忘记结束此控件的刷新。

refreshControl.endRefreshing()

//请注意,此(刷新的结尾)必须在主队列上完成! - 如果你不在那里在这种情况下,您可能会使用以下内容:

dispatch_async(dispatch_get_main_queue()) {
   self.tableView.reloadData()
   self.refreshControl.endRefreshing()
 }

对您的代码说明:

  1. 您不必再使用分号: - )。

  2. 刷新控件和刷新控件选择器不能具有相同的名称(即操作:“刷新”)。

  3. 没有“self.refreshControl = refresh;”。