不使用 UITableViewController 刷新 UITableView

我试图在 UIViewController 中的 UITableView 中实现一个拉动刷新功能。我不能使用 UITableViewController,因为我希望 UITableView 在视图控制器中是一个较小的子视图,上面还有其他一些东西。我假设这是可能的,但是有人看到它的实现了吗?

79654 次浏览

我用一个 UIViewController 和一个简单的表格视图实现了 EGORefreshTableHeaderView,技巧是在 EGO 将滚动视图作为参数的地方,如果你看表格视图本身继承自滚动视图。

它只需要那个和一些额外的连接:)

希望这个能帮上忙。

直接将刷新控件添加到 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()
}

看起来,如果您在 viewController 的 LoadView方法中创建 UIRefreshControl,那么一切都很好。UIRefreshControl 按照它应该的方式运行。使用 iOS 7.1和 iOS 8.2进行测试

这个来自@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()
}

目标-C :

这就是为表视图实现拖动刷新的方法。 与集合视图的情况相同。只需将表视图分配替换为集合视图。

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];
}

我最后用的是 ORefreshControl。 它不需要像上面的 tableView.backgroundView = refreshControl那样的任何修改,工作原理几乎相同,并且提供了一个更好看的 UI。