在没有UITableViewController的情况下刷新UITableView

我试图在UIViewController中实现一个UITableView的刷新function。 我不能使用UITableViewController,因为我想让UITableView成为视图控制器中的一个较小的子视图,还有其他一些东西。 我认为这是可能的,但有没有人看到它的实施?

直接添加刷新控件到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 } } func refresh(_ refreshControl: UIRefreshControl) { // Do your job, when done: refreshControl.endRefreshing() } 

Objective-C

这就是你如何实现拉来刷新表视图。 与收集视图的情况相同。 只需用集合视图replacetable view 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的解决scheme工作正常,但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() } 

我用一个UIViewController和一个简单的表视图实现了EGORefreshTableHeaderView,诀窍是在EGO将滚动视图作为参数的地方,如果你看起来表视图本身inheritance滚动视图。

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

希望这可以帮助。

在我看来,更优雅的解决scheme是:

 override func viewDidLoad() { super.viewDidLoad() let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(refresh(_:)), forControlEvents: .valueChanged) self.refreshControl = refreshControl } 

看来,如果你在viewController的loadView方法里面创buildUIRefreshControl,一切正常。 UIRefreshControl的行为应该如此。 testingiOS 7.1和iOS 8.2

我结束了使用ODRefreshControl 。 它不需要像上面的tableView.backgroundView = refreshControl任何破解,工作方式几乎相同,并提供了一个更好看的用户界面。