UIRefreshControl at the bottom of the UITableView

2019-01-08 22:36发布

Is it possibile add UIRefreshControl at the bottom of the UITableView? I would use it to load more data. Please, Any suggest?

8条回答
对你真心纯属浪费
2楼-- · 2019-01-08 22:57

The following answer is in Xcode 8 and Swift 3.

first declare

var spinner = UIActivityIndicatorView()

than in viewDidLoad method write the following code:

spinner = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
spinner.stopAnimating()
spinner.hidesWhenStopped = true
spinner.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 60)
tableView.tableFooterView = spinner

now finally override the scrollViewDidEndDragging delegate method with following:

override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        let offset = scrollView.contentOffset
        let bounds = scrollView.bounds
        let size = scrollView.contentSize
        let inset = scrollView.contentInset

        let y = offset.y + bounds.size.height - inset.bottom
        let h = size.height

        let reloadDistance = CGFloat(30.0)
        if y > h + reloadDistance {
            print("fetch more data")
            spinner.startAnimating()
        }
}
查看更多
一夜七次
3楼-- · 2019-01-08 22:57

Use CCBottomRefreshControl in cocoapods,

As it is for language objective. you can add the pod file to your swift project then run it, i have done it, no problem occurs for me

Hope it helps.

查看更多
我命由我不由天
4楼-- · 2019-01-08 23:02

Actually the free Sensible TableView framework does provide this functionality out of the box. You specify the batch number and it will automatically fetch the data, displaying the last cell as a 'load more' cell. Once you click that cell, it will automatically load the next batch, and so on. Worth taking a look at.

查看更多
Viruses.
5楼-- · 2019-01-08 23:04

You can use UIView to customize your refreshControl at bottom. Create UIView and add it to UITableView as footerView.

UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];

[footerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"refreshImage.png"]]];

tableView.tableFooterView = footerView;

Hide it: tableView.tableFooterView.hidden = YES;

Implement UIScrollView delegate -

(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height)
    {
             tableView.tableFooterView.hidden = NO;
            // call method to add data to tableView
    }

}

before adding data to tableView save current offset by CGPoint offset = tableView.contentOffset;

call reloadData then set previously saved offset back to tableView [tableView setContentOffset:offset animated:NO];

So that you can feel new data added at bottom.

查看更多
劳资没心,怎么记你
6楼-- · 2019-01-08 23:04

I've been stuck on the same problem recently and write a category for UIScrollView class. Here it is CCBottomRefreshControl.

查看更多
SAY GOODBYE
7楼-- · 2019-01-08 23:19

This Swift library add pull to refresh to the bottom of UITableview.

https://github.com/marwendoukh/PullUpToRefresh-iOS

I hope this help you.

查看更多
登录 后发表回答