2012-04-24 7 views
169

UIViewController内のUITableViewでプル・トゥ・リフレッシュ機能を実装しようとしています。私はUITableViewをビューコントローラの中でより小さなサブビューにしたいので、UITableViewControllerを使用することはできません。私はこれが可能だと仮定しますが、それを誰も見ていますか?UITableViewを使わずにUITableViewをリフレッシュするには

答えて

449

UITableViewControllerを使用せずに直接UITableViewにリフレッシュ制御を追加します。

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

ありがとう、私はUIRefreshControlが新しいと信じています。私はこれが今これを行うための最善の方法だと思う。 –

+2

このソリューションはiOS7 beta 1でも動作します – Berik

+0

したがって、refreshControlは基本的にUITableViewのヘッダーになりますか? –

3

UIViewControllerとシンプルなテーブルビューでEGORefreshTableHeaderViewを実装しました。スクロールビューから継承するテーブルビューを見れば、EGOがスクロールビューをパラメータとする場所でのトリックとなります。

これだけで、いくつかの余分な接続が必要です。

希望します。

-1

をあなたがのViewControllerのloadViewメソッドメソッド内UIRefreshControlを作成する場合、すべてが正常に動作しているようです。 UIRefreshControlは必要に応じて動作します。 iOS 7.1とiOS 8.2でテスト済み

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

refreshControlは私のためにtableViewの上に表示されますが、あなたの提案は' refreshControl'を消してしまい、 'tableView'の下には表示されません。私はこれを修正しました:tableView.addSubview(refreshControl)の代わりにtableView.insertSubview(refreshControl、atIndex:0) – kbpontius

10

のObjective-C

これは、テーブルビューのためにリフレッシュするためにプルを実装することができる方法です。 コレクションビューの場合と同じです。テーブルビューの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]; 
} 
+0

スピーディーバージョンが> 430の場合、obj-cバージョンは9アップフォートしか持っていませんか? –

+1

@ChaseRoberts、その1つは2月13日に返事があった、編集履歴を見て、もともとは客観的な - cであった、その時迅速なものだったので、誰もが迅速なバージョンを探していた... https:/ /stackoverflow.com/posts/15010646/revisions – Irfan

-1

私はODRefreshControlで終了しました。 上記のようなハックは必要ありません。ほぼ同じ方法で動作し、より見た目の良いUIを提供します。

関連する問題