UIRefreshControl奇怪

问题描述:

今天刚开始使用“UIRefreshControl”,并注意到一些奇怪的事情。UIRefreshControl奇怪

如果我在InterfaceBuilder中创建了UIRefreshControl,并将它连接起来,我的选择器永远不会被调用。 IB表示,控件应该触发“值已更改”的消息,并且应该调用我的代码,但从未这样做。

所以我放弃了在Interface Builder中这样做,并决定在代码中这样做。没有太多的线。所以我把这个代码我的“viewDidLoad中”例行的内部:

self.refreshControl = [UIRefreshControl new]; 
[self.refreshControl addTarget:self action:@selector(doStuff:) forControlEvents:UIControlEventValueChanged]; 
NSMutableParagraphStyle* paragraphStyle = [NSMutableParagraphStyle new]; 
paragraphStyle.alignment = NSTextAlignmentCenter; 
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to refresh" attributes:@{NSParagraphStyleAttributeName : paragraphStyle}]; 

它绘制精细,但刷新控制是可见的观点首次出现。我更希望在用户真正把桌子拉下来之前它不可见。我正在调用一个web服务,并等待结果回来,然后填充表格。所以,你只能看到控制一两秒。但它看起来很奇怪。

所以,问题是:
1.这是一个已知的错误,你不能单独从Interface Builder连接控件吗?
2.有没有办法将这个控件添加到表视图控制器,直到用户真的想看到它?

您不需要添加刷新控件,或者在您的viewController中声明一个。添加拉到刷新是一个两步过程。
步骤1:在故事板中,转到您的tableViewController,在其中显示“刷新”的地方,选择“启用”。
步骤2:将以下代码添加到您的tableViewController.m文件,在viewDidLoad中:

[self.refreshControl addTarget:self 
          action:@selector(refresh) 
        forControlEvents:UIControlEventValueChanged]; 

这是整个过程,比你-refresh方法做的东西等。没有更多的了。

是的,UIRefreshControl存在一个错误,该操作从未被调用过。基思·哈里森这个会谈在他的博客条目UIRefreshControl Fun and Games

与调试调查似乎刷新方法 从来没有所谓。我只能假设由于某种原因故事板是 没有正确地将UIRefreshControl连接到我们的动作,或者是 与 UIControlEventValueChanged事件有一些其他奇怪的交互。我已经向Apple (rdar://14178445)提交了一个错误报告,但也可以使用一个简单的解决方法。

解决方法如@AMayes所述。

+1

我有这个错误,当我的视图控制器有“*大小”= 1000px。当我将其更改回固定时,刷新开始正常工作。 – oyatek 2014-07-07 13:12:05

+0

删除故事板中的“*大小”是最终解决它的!谢谢! – 2017-09-21 00:14:20