无需UITableViewController即可刷新UITableView

Dan*_*son 179 iphone objective-c uitableview ios pull-to-refresh

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

Ber*_*rik 464

直接向a添加刷新控件,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()
}
Run Code Online (Sandbox Code Playgroud)

  • 一旦"点击",表格视图似乎意外跳跃.不知道为什么. (16认同)
  • 谁有问题控制本身不可见但其他似乎工作正常? (5认同)
  • refreshControl出现在tableView的顶部.我修复了这个:`tableView.insertSubview(refreshControl,atIndex:0)`而不是`tableView.addSubview(refreshControl)` (4认同)
  • 我发现它需要进入viewdidappear,不确定这是否是iOS 7功能 - 我还没有在iOS 8中测试它... (3认同)

小智 12

Objective-C:

这是为表视图实现pull to refresh的方法.与集合视图的情况相同.只需将表视图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];
}
Run Code Online (Sandbox Code Playgroud)