UITableView UIRefreshControl第一次不显示它的视图

AJ1*_*112 5 objective-c uitableview ios uirefreshcontrol pull-to-refresh

我在使用UITableView的项目中添加了UIRefreshControl的功能.该应用程序通过从Web服务获取条目到tableview来工作.下面是我用来添加UIRefreshControl的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.tintColor = [UIColor grayColor];
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating New Entries"];
    [refreshControl addTarget:self action:@selector(pullToRefresh) forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;

    [self pullToRefresh];    
}

- (void) pullToRefresh
{
    counter = 1;
    [self fetchEntriesNew:counter]; // My code for updating table view

    [self performSelector:@selector(updateTable) withObject:nil afterDelay:2];
}

- (void)updateTable
{
    [self.tableView reloadData];
    [self.refreshControl endRefreshing];
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我进行刷新,则会通过添加新条目进行刷新(如果有),并在tableview上显示以下视图:

在此输入图像描述

一切都很好,除非第一次启动或打开应用程序,它没有显示我在上面的图像中显示的视图,虽然它确实刷新了tableview.我希望它每次刷新时都显示刷新控件视图.谁能指出我做错了什么?谢谢!

更新:我添加了[self refreshControl beginRefreshing],UIRefreshControl的微调器视图现在显示,但它高于tableview的第一个条目.任何人都可以指出如何纠正它?

sat*_*tgi 12

这个问题让我困惑了一段时间.我发现4英寸的iOS设备没有这个问题,但3.5英寸的设备却没有.

我试图找出第一次刷新控件beginRefreshing本身和我操作拉动手势之间的差异.这是拉动操作.

我在UIRefreshControl上检查了Apple的文档.它说 The control does not initiate the refresh operation directly. Instead, it sends the UIControlEventValueChanged event when a refresh operation should occur.

所以我想也许我可以添加一些东西来模拟一个拉动手势来触发refreshControl的显示.

[yourScrollView(or tableView) setContentOffset:CGPointMake(0.0f, -60.0f)
                                      animated:YES];
[yourRefreshControl beginRefreshing];
Run Code Online (Sandbox Code Playgroud)

有用!

PS.UIRefreshControl也适用于UIScrollView.[yourScrollView addSubview:yourRefreshControl]只是工作.


Dan*_*Dan 1

我会将您的 [self pullToRefresh] 调用移至 viewWillAppear 而不是 viewDidLoad。