181

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

4

6 回答 6

469

直接将刷新控件添加到 aUITableView而不使用 a 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()
}
于 2013-02-21T19:29:18.317 回答
12

目标-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];
}
于 2016-08-09T09:05:44.097 回答
4

@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()
}
于 2015-11-04T14:19:44.023 回答
3

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

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

希望这可以帮助。

于 2012-04-24T03:58:37.020 回答
-1

似乎如果您在 viewController 的loadView方法中创建 UIRefreshControl一切正常。UIRefreshControl 的行为应如此。使用 iOS 7.1 和 iOS 8.2 测试

于 2015-03-31T06:44:30.463 回答
-1

我最终使用了ODRefreshControl。它不需要像上面那样的任何 hack tableView.backgroundView = refreshControl,工作方式几乎相同,并提供更好看的 UI。

于 2017-05-25T02:31:48.000 回答