在没有UITableViewController的情况下刷新UITableView

我试图在UIViewController中的UITableView中实现拉来刷新功能。 我不能使用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
    }
}

@objc func refresh(_ refreshControl: UIRefreshControl) {
    // Do your job, when done:
    refreshControl.endRefreshing()
}

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

这个来自@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()
}
链接地址: http://www.djcxy.com/p/87681.html

上一篇: Pull to refresh UITableView without UITableViewController

下一篇: Disable cell reuse for small fixed