只是好奇,因为它不立即看起来可能,但有一种狡猾的方式来利用新的iOS 6 UIRefreshControl类而不使用UITableViewController子类吗?

我经常使用带有UITableView子视图的UIViewController,并符合UITableViewDataSource和UITableViewDelegate,而不是直接使用UITableViewController。


当前回答

UIRefreshControl是一个UIView子类,你可以单独使用它。但我不确定它是如何呈现的。渲染可以简单地依赖于帧,但它也可以依赖于UIScrollView或UITableViewController。

无论哪种方式,它都将是一种hack而不是优雅的解决方案。我建议你找一个第三方的克隆版本,或者自己写一个。

ODRefreshControl

SlimeRefresh

其他回答

对于Swift 2.2。

首先创建UIRefreshControl()。

var refreshControl : UIRefreshControl!

在你的viewDidLoad()方法中添加:

refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Refreshing..")
    refreshControl.addTarget(self, action: #selector(YourUIViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
    self.tableView.addSubview(refreshControl)

并创建refresh函数

func refresh(refreshControl: UIRefreshControl) {

    // do something ...

    // reload tableView
    self.tableView.reloadData()

    // End refreshing
    refreshControl.endRefreshing()
}

为了消除由接受的答案引起的口吃,你可以将你的UITableView分配给一个UITableViewController。

_tableViewController = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain];
[self addChildViewController:_tableViewController];

_tableViewController.refreshControl = [UIRefreshControl new];
[_tableViewController.refreshControl addTarget:self action:@selector(loadStream) forControlEvents:UIControlEventValueChanged];

_theTableView = _tableViewController.tableView;

编辑:

一种添加UIRefreshControl的方法,没有UITableViewController,没有口吃,并在刷新tableview上的数据后保留漂亮的动画。

UIRefreshControl *refreshControl = [UIRefreshControl new];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.theTableView addSubview:refreshControl];
[self.theTableView sendSubviewToBack:refreshControl];

稍后在处理刷新数据时…

- (void)handleRefresh:(UIRefreshControl *)refreshControl {
    [self.theTableView reloadData];
    [self.theTableView layoutIfNeeded];
    [refreshControl endRefreshing];
}

试试这个,

上述解决方案是很好的,但tableView。refreshControl只适用于UITableViewController,直到iOS 9。x,来自iOS 10的UITableView。x开始。

写在Swift 3 -

let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(FeedViewController.loadNewData), for: UIControlEvents.valueChanged)
// Fix for the RefreshControl Not appearing in background
tableView?.addSubview(refreshControl)
tableView.sendSubview(toBack: refreshControl)

UIRefreshControl是一个UIView子类,你可以单独使用它。但我不确定它是如何呈现的。渲染可以简单地依赖于帧,但它也可以依赖于UIScrollView或UITableViewController。

无论哪种方式,它都将是一种hack而不是优雅的解决方案。我建议你找一个第三方的克隆版本,或者自己写一个。

ODRefreshControl

SlimeRefresh

Keller的第一个建议在iOS 7中导致了一个奇怪的错误,即在视图控制器重新出现后,表的插入增加了。换到第二个答案,使用uitableviewcontroller,为我解决了问题。