Ios UITableView UIRefreshControl第一次不显示其视图

Ios UITableView UIRefreshControl第一次不显示其视图,ios,objective-c,uitableview,pull-to-refresh,uirefreshcontrol,Ios,Objective C,Uitableview,Pull To Refresh,Uirefreshcontrol,我在使用UITableView的项目中添加了UIRefreshControl的功能。该应用程序的工作原理是将条目从web服务提取到tableview。下面是我用来添加UIRefreshControl的代码: - (void)viewDidLoad { [super viewDidLoad]; UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; refreshControl.tintCol

我在使用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顶部显示以下视图:

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


更新:我添加了[self-refreshControl beginRefreshing],现在显示UIRefreshControl的微调器视图,但它位于tableview的第一个条目之上。有人能指出如何更正吗?

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

有两件事可以在tableview中添加UIRefreshControl,它们都不会添加到您的代码中

1. [self setRefreshControl:tableRefreshControl];
2. [self.m_TableView addSubview:tableRefreshControl];
如果类是UIViewController的子类,请添加1或2

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

self.refreshControl = refreshControl; with 2 line

这个问题困扰了我一段时间。我发现4英寸iOS设备没有这个问题,但3.5英寸设备有

我试图找出refreshControl第一次开始自我刷新和我操作pull手势时的区别。这是pull操作

我查看了苹果在UIRefreshControl上的文档,上面说,
控件不会直接启动刷新操作。相反,当刷新操作发生时,它发送UIControlEventValueChanged事件。

所以我想也许我可以添加一些东西来模拟拉动动作来触发刷新控件的显示

[yourScrollView(or tableView) setContentOffset:CGPointMake(0.0f, -60.0f)
                                      animated:YES];
[yourRefreshControl beginRefreshing];
它能工作

另外,UIRefreshControl也适用于UIScrollView<代码>[yourScrollView添加子视图:yourRefreshControl]正常工作。

在代码之前:

[刷新控制开始刷新]

插入代码:


[refreshControl LayoutIneed]

我在视图中添加了[self-pullToRefresh]将出现,但在输出中没有看到任何差异。还有什么我能做的吗?你能发布一张你看到的不是预期结果的图片吗?重新阅读本文,我只是想确保我完全理解这个问题。当应用程序启动时,TableView会被新数据刷新,但微调器不会自动显示。但是如果我手动拉刷新,它就会出现。希望清除任何困惑哪一个纺纱机?导航栏上的那个还是它下面的那个?导航栏上的那个是我自己编程添加的,所以它总是显示出来。我说的是UIRefreshControl添加的下面一个类我的类是UITableViewController的子类,所以正如您所说,我必须用[self.tableView addSubview:tableRefreshControl]替换self.refreshControl=refreshControl;但什么是控制?它不承认它,因为它声明没有位置,也没有内置的东西。你能说得更准确些吗?谢谢从你的回答来看,你似乎能够解决这个问题。我试过你的代码,但对我无效。我使用了这个[self.tableView setContentOffset:CGPointMake(0.0f,60.0f)动画:YES];[自我刷新控制开始刷新];现在,tableview的第一个单元格几乎位于导航栏后面。你能告诉我如何修复它吗?嗨@AJ112,在我的代码中它是
-60.0f
,而不是
60.0f
-(void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
用于设置偏移量,因此此处的偏移量应为负值,以模拟下拉手势,如果设置为正值,内容的顶部将在窗口之外。我添加了-60和60,并尝试添加其他值,但结果完全相同。默认情况下,它位于正常位置,但加载完成后,第一个单元格将移动到导航栏下方。我还需要做些什么来修复它吗?对于那些似乎无法让它以这种方式工作的人来说:可能是