Answers:
将刷新控件直接添加到中,UITableView
而不使用UITableViewController
:
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()
}
tableView.insertSubview(refreshControl, atIndex: 0)
而不是tableView.addSubview(refreshControl)
目标-C:
这是实现表视图刷新的方式。与集合视图相同。只需将表视图alloc替换为集合视图即可。
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
。我通过以下方法解决了这个问题:tableView.insertSubview(refreshControl,atIndex:0)而不是tableView.addSubview(refreshControl)
我已经用UIViewController和一个简单的表视图实现了EGORefreshTableHeaderView,窍门是在EGO将滚动视图作为参数的地方,如果您看表视图本身是从滚动视图继承的。
它只需要和一些额外的连接即可:)
希望这可以帮助。
看来,如果您在viewController的loadView方法内创建UIRefreshControl,则一切正常。UIRefreshControl的行为应有。经过iOS 7.1和iOS 8.2测试
我最终使用ODRefreshControl。它不需要像上面这样的hack tableView.backgroundView = refreshControl
,工作方式几乎相同,并且提供了更好的UI。