1. ホーム
  2. ios

[解決済み] UIRefreshControlをUIScrollViewで使用することはできますか?

2023-06-21 13:16:30

質問

5つほどある UIScrollView があり、それらはすべて複数の .xib ファイルを読み込んでいます。 今度は UIRefreshControl . これらは、UITableViewControllersで使用するように作られています(UIRefreshControlクラスのリファレンスによる)。 私は、すべての5つの UIScrollView の動作をやり直したくないのです。 私はすでに UIRefreshControl の中で UIScrollView を追加すると、いくつかの点を除いて期待通りに動作します。

  1. リフレッシュ画像がローダーに変わった直後は UIScrollView が 10 ピクセルほど下に飛びますが、これは、私が非常に注意深く UIScrollview を非常にゆっくりドラッグしたときだけです。

  2. スクロールダウンして再読み込みを開始し、その後で UIScrollView を離すと UIScrollView は、私が放った場所に留まります。 再読み込みが終わると UIScrollView はアニメーションなしで上にジャンプします。

以下は私のコードです。

-(void)viewDidLoad
{
      UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
      [refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
      [myScrollView addSubview:refreshControl];
}

-(void)handleRefresh:(UIRefreshControl *)refresh {
      // Reload my data
      [refresh endRefreshing];
}

何か時間を短縮して UIRefreshControl の中に UIScrollView ?

ありがとうございます!!!

どのように解決するのですか?

では iOS 10 UIScrollView はすでに は refreshControl プロパティを持っています。 . このrefreshControlは、UIRefereshControlを作成し、このプロパティに代入すると表示されます。

そこには は必要ありません。 UIRefereshControl をサブビューとして追加する必要はもうありません。

func configureRefreshControl () {
   // Add the refresh control to your UIScrollView object.
   myScrollingView.refreshControl = UIRefreshControl()
   myScrollingView.refreshControl?.addTarget(self, action:
                                      #selector(handleRefreshControl),
                                      for: .valueChanged)
}

@objc func handleRefreshControl() {
   // Update your content…

   // Dismiss the refresh control.
   DispatchQueue.main.async {
      self.myScrollingView.refreshControl?.endRefreshing()
   }
}

UIRefreshControlオブジェクトは、任意のUIScrollViewオブジェクトにアタッチする標準的なコントロールです。

コードと引用元 https://developer.apple.com/documentation/uikit/uirefreshcontrol