web-dev-qa-db-ja.com

tableViewがスクロールを開始したことを知る方法

疑問があります。tableViewスクロールをインターセプトしてアクションを追加する方法はありますか?たとえば、私のprototype cell背景は赤で、セル内を修正すると背景色が青で始まり、tableView背景色をスクロールすると赤に戻ります。これを行うことは可能ですか?!

前もって感謝します。

8
Fabio Cenni

UITableView 継承元 UIScrollView および UITableViewDelegate 拡張 UIScrollViewDelegate

特にあなたは scrollViewDidScroll メソッドに興味があるかもしれません。したがって、UITableViewDelegate実装で、次のメソッドを追加します。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    NSLog("Table view scroll detected at offset: %f", scrollView.contentOffset.y)
}
35
redent84

CellForRowは、スクロールを検出する方法であり、indexPath.rowビューに入る次のセルの。ユーザーが非常に短い距離をスクロールして、新しいセルまたはリサイクルされたセルが構成されていない場合、ドラッグは検出されません。ただし、scrollViewWillBeginDraggingなどの 組み込みメソッド を使用しても、短距離スクロールは検出されません。

var lastCellForRowAtIndex = 0
var isScrollingUp = false
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    isScrollingUp = indexPath.row > lastCellForRowAtIndex
    lastCellForRowAtIndex = indexPath.row
}
0
ScottyBlades

TableViewのデリゲートとして設定されているViewControllerで、scrollViewのデリゲートメソッドを設定することもできます。これらは、scrollViewが含まれているため、tableViewがスクロールされたときに呼び出されます。

例えば:

extension ViewController: UIScrollViewDelegate {
    func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 

    }
}
0
Swinny89

たとえば、変数を維持する方がよいでしょう。 var isBackgroundColorRed: Bool = true

また、背景色を青に設定した場合のスクロールy位置用にもう1つ。例えば.

var blueBackgroundColorYOffset: CGFloat?

背景色を青に設定する場合は、yオフセットをcontentView.Origin.yに設定します。

次に、テーブルビュー(UIScrollViewをサブクラス化する)のデリゲートで

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if !isBackgroundColorRed {
        // apply some color blending between blue and red based on 
        // the amount of movement on y axis, until you reach the limit
        // its also important to take the absolute value of the blueBackgroundColorYOffset
        // and the offset here in scrollViewDidScroll to cover up or down movements
        // say 1 cell's height, then set your isBackgroundColorRed to true
    }
}

これをプロジェクトに追加して、yurブリッジヘッダーを更新してみてください。 IColor-CrossFade

この手法により、突然の背景の変化ではなく、優れたUXが得られます。

0
system