4

我在使用UITableView的项目中添加了UIRefreshControl的功能。该应用程序通过从Web服务提取条目到tableview来工作。下面是我用来添加UIRefreshControl代码:UITableView 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。我希望它每次刷新时都显示刷新控制视图。任何人都可以指出我做错了什么?谢谢!

UPDATE:我已经添加了[self refreshControl beginRefreshing],并且UIRefreshControl的微调控件视图现在正在显示,但它的上方是第一个tableview的条目。任何人都可以指出如何纠正它?

+0

的可能重复的[UIRefreshControl - beginRefreshing时的UITableViewController是内部的UINavigationController不工作] (http://stackoverflow.com/questions/14718850/uirefreshcontrol-beginrefreshing-not-working-when-uitableviewcontroller-is-ins) – JosephH

回答

1

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

+0

我添加了[self pullToRefresh] vie会出现,但看到输出没有差异。还有什么我可以做的? – AJ112

+0

你能张贴你看到的图片吗?通过这个重新阅读我只是想确保我完全理解这个问题。 – Dan

+0

当应用程序启动时,TableView会使用新数据进行刷新,但微调控件不会自行显示。但是,如果我做拉手动刷新,然后显示。希望清除任何混淆 – AJ112

0

有可以做补充UIRefreshControl在你的tableview都没有在你的代码添加

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

要么加1或2,如果你的类的UIViewController

的子类

如果两件事情你的类的UITableViewController的子类,然后尝试更换

self.refreshControl = refreshControl; with 2 line 
+0

我的类是UITableViewController的子类,所以你说我必须用[self.tableView addSubview:tableRefreshControl]替换self.refreshControl = refreshControl;但是什么是tableRefreshControl?它不承认它,因为它宣布不在哪里,也没有内置的东西。你能更精确吗?谢谢! – AJ112

12

这个问题已经真正困扰了我while.I发现,4英寸iOS设备不必这个问题,但3.5英寸的设备呢。

我试图找出第一次刷新控制beginRefreshing本身和当我操作拉手势时的差异。这是拉操作。

而且我查了苹果公司的文件上UIRefreshControl.It说: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]只是工作。

[refreshControl beginRefresh]

插入的代码::代码之前

+0

从你的答案看,你可以解决这个问题。我试过你的代码,但它不适合我。我用这个[self.tableView setContentOffset:CGPointMake(0.0f,60.0f) animated:YES]; [self.refreshControl beginRefreshing]; – AJ112

+0

现在,tableview的第一个单元几乎在导航栏后面。你能告诉我如何解决它吗? – AJ112

+0

Hi @ AJ112,我的代码是'-60.0f',而不是'60.0f'。 ' - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated'是为了设置__offset__,所以这里的偏移量应该是负的以模拟__pull down__手势,如果设置为正值,则内容的顶部将在外部的窗户。 – satgi

0

[refreshControl layoutIfNeeded]

相关问题