只是好奇,因为它不立即看起来可能,但有一种狡猾的方式来利用新的iOS 6 UIRefreshControl类而不使用UITableViewController子类吗?
我经常使用带有UITableView子视图的UIViewController,并符合UITableViewDataSource和UITableViewDelegate,而不是直接使用UITableViewController。
只是好奇,因为它不立即看起来可能,但有一种狡猾的方式来利用新的iOS 6 UIRefreshControl类而不使用UITableViewController子类吗?
我经常使用带有UITableView子视图的UIViewController,并符合UITableViewDataSource和UITableViewDelegate,而不是直接使用UITableViewController。
当前回答
Keller的第一个建议在iOS 7中导致了一个奇怪的错误,即在视图控制器重新出现后,表的插入增加了。换到第二个答案,使用uitableviewcontroller,为我解决了问题。
其他回答
事实证明,当你使用带有UITableView子视图的UIViewController并遵循UITableViewDataSource和UITableViewDelegate时,你可以使用以下方法:
self.refreshControl = [[UIRefreshControl alloc]init];
[self.refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
将刷新控件添加为子视图将在节头上方创建一个空白区域。
相反,我嵌入了一个UITableViewController到我的UIViewController中,然后改变我的tableView属性指向嵌入的那个,viola!最小的代码更改。: -)
步骤:
在Storyboard中创建一个新的UITableViewController并将其嵌入到你原来的UIViewController中 替换@IBOutlet weak var tableView: UITableView!与新嵌入的UITableViewController中的一个,如下所示
class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
let tableViewController = self.childViewControllers.first as! UITableViewController
tableView = tableViewController.tableView
tableView.dataSource = self
tableView.delegate = self
// Now we can (properly) add the refresh control
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: "handleRefresh:", forControlEvents: .ValueChanged)
tableViewController.refreshControl = refreshControl
}
...
}
Keller的第一个建议在iOS 7中导致了一个奇怪的错误,即在视图控制器重新出现后,表的插入增加了。换到第二个答案,使用uitableviewcontroller,为我解决了问题。
试试这个,
上述解决方案是很好的,但tableView。refreshControl只适用于UITableViewController,直到iOS 9。x,来自iOS 10的UITableView。x开始。
写在Swift 3 -
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(FeedViewController.loadNewData), for: UIControlEvents.valueChanged)
// Fix for the RefreshControl Not appearing in background
tableView?.addSubview(refreshControl)
tableView.sendSubview(toBack: refreshControl)
对于Swift 2.2。
首先创建UIRefreshControl()。
var refreshControl : UIRefreshControl!
在你的viewDidLoad()方法中添加:
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Refreshing..")
refreshControl.addTarget(self, action: #selector(YourUIViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refreshControl)
并创建refresh函数
func refresh(refreshControl: UIRefreshControl) {
// do something ...
// reload tableView
self.tableView.reloadData()
// End refreshing
refreshControl.endRefreshing()
}