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

时间:2013-06-19 13:49:17

标签: ios objective-c uitableview pull-to-refresh uirefreshcontrol

我在使用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];
}

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

enter image description here

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

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

4 个答案:

答案 0 :(得分: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];

有效!

PS。 UIRefreshControl也适用于UIScrollView。 [yourScrollView addSubview:yourRefreshControl]只是有效。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在你的tableview中添加UIRefreshControl有两件事可以在代码中添加它们

1. [self setRefreshControl:tableRefreshControl];
2. [self.m_TableView addSubview:tableRefreshControl];

如果您的类是UIViewController的子类

,则添加1或2

如果您的类是UITableViewController的子类,则尝试替换

self.refreshControl = refreshControl; with 2 line

答案 3 :(得分:0)

代码前的

[refreshControl beginRefresh]

插入代码:

[refreshControl layoutIfNeeded]