Tarik untuk menyegarkan UITableView tanpa UITableViewController

180

Saya mencoba menerapkan fitur tarik untuk menyegarkan dalam UITableView dalam UIViewController. Saya tidak bisa menggunakan UITableViewController karena saya ingin UITableView menjadi subview yang lebih kecil di view controller, dengan beberapa hal lain di atasnya. Saya berasumsi ini mungkin, tetapi adakah yang melihat penerapannya?

Daniel Robinson
sumber

Jawaban:

465

Tambahkan kontrol penyegaran langsung ke UITableViewtanpa menggunakan 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()
}
Berik
sumber
1
Luar biasa dan mudah. Ini berfungsi untuk saya ketika saya mencobanya pada tampilan tabel yang ditambahkan ke UIViewController di iOS 7.0.4.
thandasoru
5
Adakah yang punya masalah di mana kontrol itu sendiri tidak terlihat tetapi tampaknya berfungsi dengan baik?
remotevision
16
Tampilan tabel tampaknya melompat tiba-tiba begitu "klik". Belum yakin kenapa.
Bob Spryn
3
Saya menemukan bahwa itu harus masuk viewdidappear, tidak yakin apakah itu fitur iOS 7 - Saya belum mengujinya di iOS 8 ...
Jack Solomon
4
RefreshControl muncul di atas tableView. Saya memperbaikinya dengan: tableView.insertSubview(refreshControl, atIndex: 0)alih-alihtableView.addSubview(refreshControl)
kbpontius
12

Tujuan-C :

Ini adalah bagaimana Anda dapat menerapkan tarikan untuk menyegarkan untuk tampilan tabel. Sama seperti dalam hal tampilan koleksi. Cukup ganti alokasi tampilan tabel dengan tampilan koleksi.

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];
}
Manish Methani
sumber
Bagaimana versi obj-c hanya memiliki 9 upvotes ketika versi swift memiliki> 430?
Chase Roberts
1
@ ChaseRoberts, Yang dijawab pada 13 Feb, lihat di edit sejarah, awalnya itu di objektif-c, Karena pada waktu itu cepat baru, setiap orang mencari versi cepat ... stackoverflow.com/posts / 15010646 / revisi
Irfan
4

Solusi dari @berik ini berfungsi dengan baik tetapi UIController ditampilkan di atas UITableViewController. Cara untuk memperbaikinya adalah dengan melakukan perubahan ini:

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()
}
Andres
sumber
3
RefreshControl muncul di atas tableView untuk saya, tetapi saran Anda membuat saya refreshControlmenghilang, tidak muncul di bawah tableView. Saya memperbaikinya dengan: tableView.insertSubview (refreshControl, atIndex: 0) alih-alih tableView.addSubview (refreshControl)
kbpontius
3

Saya telah mengimplementasikan EGORefreshTableHeaderView dengan UIViewController dan tampilan tabel sederhana, caranya adalah a di tempat-tempat di mana EGO mengambil tampilan gulir sebagai parameter, jika Anda melihat tampilan tabel itu diturunkan dari tampilan gulir.

Hanya membutuhkan itu dan beberapa koneksi tambahan :)

Semoga ini membantu.

Juan Alberto López Cavallotti
sumber
-1

Tampaknya jika Anda membuat UIRefreshControl di dalam metode loadView viewController semuanya berfungsi dengan baik. UIRefreshControl berperilaku sebagaimana mestinya. Diuji dengan iOS 7.1 dan iOS 8.2

Giannis Giannopoulos
sumber
-1

Saya akhirnya menggunakan ODRefreshControl . Tidak perlu retas seperti di atas tableView.backgroundView = refreshControl, bekerja dengan cara yang hampir sama, dan memberikan UI yang terlihat lebih baik.

Alex Bin Zhao
sumber