我正在尝试在UIViewController中的UITableView实现下拉刷新功能。我不能使用UITableViewController,因为我希望UITableView成为视图控制器中较小的子视图,上面还有一些其他东西。我认为这是可能的,但是否有人见过这样的实现方式呢?
注:pull to refresh指下拉刷新功能我正在尝试在UIViewController中的UITableView实现下拉刷新功能。我不能使用UITableViewController,因为我希望UITableView成为视图控制器中较小的子视图,上面还有一些其他东西。我认为这是可能的,但是否有人见过这样的实现方式呢?
注:pull to refresh指下拉刷新功能在不使用UITableViewController
的情况下,直接向UITableView
添加刷新控件:
override func viewDidLoad() {
super.viewDidLoad()
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(refresh(_:)), for: .valueChanged)
if #available(iOS 10.0, *) {
tableView.refreshControl = refreshControl
} else {
tableView.backgroundView = refreshControl
}
}
@objc func refresh(_ refreshControl: UIRefreshControl) {
// Do your job, when done:
refreshControl.endRefreshing()
}
Objective-C:
以下是如何为表格视图实现下拉刷新的方法。 与集合视图的情况相同,只需将table view alloc替换为collection view。
UITableView *tableViewDemo = [[UITableView alloc]init];
tableViewDemo.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
tableViewDemo.dataSource = self;
tableViewDemo.delegate = self;
[self.view addSubView: tableViewDemo];
UIRefreshControl *refreshController = [[UIRefreshControl alloc] init];
[refreshController addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[tableViewDemo addSubview:refreshController];
#pragma mark - Handle Refresh Method
-(void)handleRefresh : (id)sender
{
NSLog (@"Pull To Refresh Method Called");
[refreshController endRefreshing];
}
@berik的解决方案很好,但是UIController显示在UITableViewController的上方。修复它的方法是进行以下更改:
override func viewDidLoad() {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
tableView.backgroundView = refreshControl // <- THIS!!!
}
func refresh(refreshControl: UIRefreshControl) {
// Do your job, when done:
refreshControl.endRefreshing()
}
refreshControl
消失,而不是出现在tableView
下面。对我而言,refreshControl
出现在tableView
顶部。我通过tableView.insertSubview(refreshControl, atIndex: 0)
进行修复,而不是使用tableView.addSubview(refreshControl)
。 - kbpontius我最终使用了ODRefreshControl。
它不需要像上面那样的任何hack tableView.backgroundView = refreshControl
,几乎以相同的方式工作,并提供更好的外观UI。
看起来如果你在视图控制器的loadView方法中创建UIRefreshControl,一切都会正常工作。UIRefreshControl表现得像它应该的那样。在iOS 7.1和iOS 8.2上测试过。
tableView.addSubview(refreshControl)
改为tableView.insertSubview(refreshControl, atIndex: 0)
,这样可以将其放置在表格视图底层。 - kbpontius