UITableViewController olmadan UITableView'ü yenilemek için çekin


180

Bir UIViewController içinde bir UITableView yenileme özelliği bir çekme uygulamak çalışıyorum. Bir UITableViewController kullanamıyorum çünkü UITableView, görünüm denetleyicisinde daha küçük bir alt görünüm olmasını istiyorum, üzerinde bazı diğer şeyler. Bunun mümkün olduğunu düşünüyorum, ancak bunun bir uygulamasını gördü mü?

Yanıtlar:


465

Aşağıdakileri UITableViewkullanmadan doğrudan bir yenileme denetimi ekleyin 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()
}

1
Mükemmel ve kolay. İOS 7.0.4'te UIViewController'a eklenen bir tablo görünümünde denediğimde benim için çalışıyor.
thandasoru

5
Herkes kontrolün görünür olmadığı, ancak aksi takdirde iyi görünüyor gibi bir sorun vardı?
Mart'ta

16
Tablo görünümü "tıklandığında" beklenmedik şekilde aşağı iniyor gibi görünüyor. Henüz neden olduğundan emin değilim.
Bob Spryn

3
Viewdidappear'a gitmesi gerektiğini buldum, bunun bir iOS 7 özelliği olup olmadığından emin değilim - henüz iOS 8'de test etmiyorum ...
Jack Solomon

4
RefreshControl, tableView öğesinin üstünde görünür. Bunu şu şekilde tableView.insertSubview(refreshControl, atIndex: 0)tableView.addSubview(refreshControl)
çözdüm

12

Amaç-C :

Tablo görünümü için yenilemek üzere çekme özelliğini bu şekilde uygulayabilirsiniz. Koleksiyon görünümündeki ile aynı. Sadece tablo görünümü tahsisini koleksiyon görünümü ile değiştirin.

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

Objektif versiyonda hızlı versiyon> 430 olduğunda nasıl 9 upvotes var?
Chase Roberts

1
@ChaseRoberts, Bu 13 Şubat tarihinde cevaplandı, düzenleme geçmişine bir göz atın, başlangıçta objektif-c idi, o zaman hızlı yeni olduğu için, her biri hızlı sürümü arıyordu ... stackoverflow.com/posts / 15010646 / revizyonlar
Irfan

4

@Berik'ten gelen bu çözüm iyi çalışıyor ancak UIController UITableViewController'ın üstünde görüntüleniyor. Bunu düzeltmenin yolu şu değişikliği yapmaktır:

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()
}

3
RefreshControl benim için tableView üstünde görünür, ancak öneriniz benim refreshControlkayboluyor, altında görünmüyor tableView. Bunu şu şekilde düzelttim: tableView.addSubview (refreshControl) yerine tableView.insertSubview (refreshControl, atIndex: 0)
57'de kbpontius

3

Bir UIViewController ve basit bir tablo görünümü ile EGORefreshTableHeaderView uyguladım, hile, tablo görünümü kendisi kaydırma görünümünden miras bakarsanız EGO bir kaydırma görünümü parametre olarak alır yerlerde bir olmasıdır.

Sadece bunu ve birkaç ekstra bağlantıyı gerektirir :)

Bu yardımcı olur umarım.


-1

ViewController'ın loadView yöntemi içinde UIRefreshControl oluşturursanız, her şey iyi çalışıyor gibi görünüyor . UIRefreshControl gerektiği gibi davranır. İOS 7.1 ve iOS 8.2 ile test edildi


-1

ODRefreshControl kullanarak sona erdi . Yukarıdaki gibi bir saldırıya gerek yoktur tableView.backgroundView = refreshControl, neredeyse aynı şekilde çalışır ve daha iyi görünen bir kullanıcı arayüzü sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.