UIViewController内のUITableViewにプルトゥリフレッシュ機能を実装しようとしています。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()
}
tableView.insertSubview(refreshControl, atIndex: 0)
ように修正しました:代わりにtableView.addSubview(refreshControl)
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];
}
@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()
}
refreshControl
、は表示されず、の下には表示されませんtableView
。私はこれを修正しました:tableView.addSubview(refreshControl)の代わりにtableView.insertSubview(refreshControl、atIndex:0)
UIViewControllerと単純なテーブルビューを使用してEGORefreshTableHeaderViewを実装しました。トリックは、EGOがスクロールビューをパラメーターとして取る場所で、テーブルビュー自体がスクロールビューから継承されていることを確認した場合です。
それだけでいくつかの追加の接続が必要です:)
お役に立てれば。
viewControllerのloadViewメソッド内にUIRefreshControlを作成すると、すべてが正常に機能するようです。UIRefreshControlは正常に動作します。iOS 7.1およびiOS 8.2でテスト済み
ODRefreshControlを使用してしまいました。上記のようなハックは必要なくtableView.backgroundView = refreshControl
、ほぼ同じように機能し、見栄えの良いUIを提供します。