[解決済み] UIRefreshControl - UITableViewControllerがUINavigationControllerの中にある場合、beginRefreshingは動作しません。
質問
UITableViewController(UINavigationController内にある)にUIRefreshControlをセットアップしたところ、期待通りに動作しました(すなわち、プルダウンが正しいイベントを発生させる)。しかし、プログラム的に
beginRefreshing
のようなリフレッシュコントロールのインスタンスメソッドを呼び出すと
[self.refreshControl beginRefreshing];
何も起こりません。アニメーションしてスピナーが表示されるはずです。その
endRefreshing
メソッドは、リフレッシュの後にそれを呼び出すと、適切に動作します。
この動作で基本的なプロトタイププロジェクトを作成し、UITableViewControllerをアプリケーションデリゲートのルートビューコントローラに直接追加した場合、正しく動作します。
self.viewController = tableViewController;
self.window.rootViewController = self.viewController;
しかし、もし私が
tableViewController
を UINavigationController に追加してから、ナビゲーション・コントローラーを
rootViewController
として、ナビゲーション・コントローラーを
beginRefreshing
メソッドはもう機能しません。例
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableViewController];
self.viewController = navController;
self.window.rootViewController = self.viewController;
私の感覚では、これはナビゲーション・コントローラ内のネストされたビュー階層がリフレッシャーコントロールとうまくいっていないことと関係があるような気がします。
ありがとうございます。
どのように解決するのですか?
プログラム的に更新を開始する場合、テーブルビューを自分でスクロールする必要があるようです、例えば、contentoffsetを変更することによって
[self.tableView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:YES];
この理由は、ユーザーがテーブルビューの真ん中や底にいるときに、リフレッシュコントロールまでスクロールするのが望ましくない可能性があるからでしょうか。
Swift 2.2 バージョン (@muhasturk による)
self.tableView.setContentOffset(CGPoint(x: 0, y: -refreshControl.frame.size.height), animated: true)
簡単に言うと、これをポータブルなものにするために、次の拡張子を追加します。
UIRefreshControl+ProgramaticallyBeginRefresh.swiftを追加します。
extension UIRefreshControl {
func programaticallyBeginRefreshing(in tableView: UITableView) {
beginRefreshing()
let offsetPoint = CGPoint.init(x: 0, y: -frame.size.height)
tableView.setContentOffset(offsetPoint, animated: true)
}
}
関連
-
iOS classic error Undefined symbols for architecture XXX:
-
EXC_BAD_ACCESS (code=2, address=0x0)
-
JenkinsがIOSを自動パッケージングしてモミを配布
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み】UITableViewControllerを使用しないUIRefreshControl
-
[解決済み] UICollectionView上のUIRefreshControlは、コレクションがコンテナの高さを満たした場合にのみ動作する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
iOS classic error Undefined symbols for architecture XXX:
-
IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決
-
IOS8 Development Guide Error Thread 1: signal SIGABRT
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] Unwind segueは何に使うのか、どう使うのか?
-
[解決済み] UIViewに角丸をつける
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] ぼかしの入ったオーバーレイビューの作成
-
[解決済み] Swiftで配列に要素を追加する