我试图在 UIViewController 中的 UITableView 中实现一个拉动刷新功能。我不能使用 UITableViewController,因为我希望 UITableView 在视图控制器中是一个较小的子视图,上面还有其他一些东西。我假设这是可能的,但是有人看到它的实现了吗?
我用一个 UIViewController 和一个简单的表格视图实现了 EGORefreshTableHeaderView,技巧是在 EGO 将滚动视图作为参数的地方,如果你看表格视图本身继承自滚动视图。
它只需要那个和一些额外的连接:)
希望这个能帮上忙。
直接将刷新控件添加到 UITableView而不使用 UITableViewController:
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。
tableView.backgroundView = refreshControl