UIRefreshControl很奇怪

时间:2013-03-04 16:26:36

标签: ios ios6 interface-builder uitableview 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}];

它绘制得很好,但是当视图首次出现时,刷新控件是可见的。我希望直到用户真正拉下桌面才会看到它。我正在打电话给网络服务,等待结果回来,然后我填写表格。所以,你只看到一两秒的控件。但它看起来很奇怪。

所以,问题是:
1.这是一个已知的错误,您无法仅通过Interface Builder连接控件吗? 2.有没有办法将此控件添加到表视图控制器,直到用户实际想要看到它时才显示它?

2 个答案:

答案 0 :(得分:1)

您不需要添加刷新控件,也不需要在viewController中声明一个。添加pull-to-refresh是一个两步过程 第1步:在你的故事板中,转到你的tableViewController,并在其中显示“Refreshing”,选择“Enabled”。
第2步:在viewDidLoad:

中将以下代码添加到tableViewController.m文件中
[self.refreshControl addTarget:self
                            action:@selector(refresh)
                  forControlEvents:UIControlEventValueChanged];

这是整个过程,除了在你的-refresh方法中做的事情。没有更多的东西了。

答案 1 :(得分:0)

是的,UIRefreshControl存在一个从未调用过操作的错误。 Keith Harrison在他的博客文章UIRefreshControl Fun and Games中谈到了这一点:

  

使用调试器进行调查似乎是刷新方法   从未打电话过我只能假设故事板是出于某种原因   没有正确连接UIRefreshControl到我们的行动或是   与...有一些其他奇怪的互动   UIControlEventValueChanged事件。我已经向Apple提交了一份错误报告   (rdar://14178445)但您也可以使用简单的解决方法。

解决方法如@AMayes所述。