2

今天刚开始使用“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. 有没有办法将此控件添加到 table-view 控制器,直到用户真正想要看到它才出现?

4

2 回答 2

1

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

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

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

于 2013-04-03T15:59:53.700 回答
0

是的,存在一个UIRefreshControl永远不会调用该操作的错误。Keith Harrison 在他的博文 UIRefreshControl Fun and Games中谈到了这一点:

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

解决方法如@AMayes 所述。

于 2013-06-24T07:35:21.307 回答