没有UITableViewController的UIRefreshControl

只是好奇,因为它似乎不可能,但有没有偷偷摸摸的方式来利用新的iOS 6 UIRefreshControl类而不使用UITableViewController子类?

我经常使用带有UITableView子视图的UIViewController ,并且符合UITableViewDataSourceUITableViewDelegate而不是直接使用UITableViewController


在预感上,基于DrummerB的灵感,我试着简单地将UIRefreshControl实例作为子视图添加到我的UITableView 。 它奇迹般地工作!

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.myTableView addSubview:refreshControl];

这将在您的表视图上添加一个UIRefreshControl ,并按预期工作,而不必使用UITableViewController :)


编辑:这上面仍然有效,但正如一些人指出的那样,以这种方式添加UIRefreshControl时会有轻微的“口吃”。 解决方案是实例化一个UITableViewController,然后设置你的UIRefreshControl和UITableView,即:

UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.myTableView;

self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(getConnections) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;

为了消除由接受的答案引起的口吃,你可以将你的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;

编辑:

在没有任何口吃的情况下添加没有UITableViewControllerUIRefreshControl ,并在刷新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];
}

你会尝试使用你正在使用的ViewController中的容器视图。 你可以用专用的tableview定义干净的UITableViewController子类,并将其放置在ViewController中。

链接地址: http://www.djcxy.com/p/75413.html

上一篇: UIRefreshControl without UITableViewController

下一篇: Scrolling an UITableView will stop Timer