2

今日「UIRefreshControl」を使い始めたばかりで、奇妙なことに気づきました。

InterfaceBuilderでUIRefreshControlを作成し、それをすべて接続すると、セレクターが呼び出されることはありません。IBは、コントロールは「値が変更されました」メッセージで起動し、コードを呼び出す必要があると言っていますが、決して起動しません。

だから私はInterfaceBuilderでこれを行うのをやめ、コードでこれを行うことにしました。行が多すぎません。したがって、このコードを「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〜2秒しか表示されません。しかし、それは奇妙に見えます。

したがって、質問は次のとおり
です。1.これは、Interface Builderからのみコントロールを接続できない既知のバグですか?
2.このコントロールを、ユーザーが実際に見たいと思うまで表示せずに、テーブルビューコントローラーに追加する方法はありますか?

4

2 に答える 2

1

更新コントロールを追加したり、viewController で宣言したりする必要はありません。pull-to-refresh の追加は、2 段階のプロセスです。
ステップ 1: ストーリーボードで、tableViewController に移動し、"Refreshing" と表示されている場所で "Enabled" を選択します。
ステップ 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 に答える