2017-05-16 5 views
1

私は現在、HeaderViewがUIScrollViewであるUITableViewを持っています。私はこれを、回転する情報を常に2秒ごとにタイマーを動かすように表示するカルーセルの一種として使用しています。私がしようとしているのは、ユーザーがスクロールビューを自分で移動したときに検出することです。ここで私は今ScrollViewの動きを処理しなければならないコードです。UITableViewヘッダーがスクロールするときを検出する方法は?

override func viewDidLoad() { 
    var myTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true) 
} 
func runTimedCode() { 
    var itemCount = newsArray.count // how many items are in the news reel 
    if currentPage < itemCount { 
     let newX = CGFloat(currentPage) * self.view.frame.width // calculate next page position 
     featuredScrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true) 
     currentPage += 1 
    } else { 
     // end of items 
     currentPage = 0 
     let newX = CGFloat(currentPage) * self.view.frame.width // calculate next page position 
     print("new x = \(newX)") 
     featuredScrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true) 
    } 
} 

ただし、scrollviewDidScroll関数は、tableviewを移動したときにのみ呼び出されます。 tableView上のScrollViewがスクロールされたときを検出する方法はありますか?私は完全にこれに取り組んでいるすべての助けに感謝しています。ありがとう!

Interface Builder view

+1

スクロールビューのデリゲートを設定しましたか? – koropok

+0

@koropok facepalm ...私は完全に忘れました。それが問題を解決しました。私は次の質問は、tableViewがスクロールされているときとScrollViewがスクロールされているときを区別する方法だと思いますか? –

+1

これは見ましたか?それが解決策であるかどうかは分かりませんが、答えはおそらくこれの派生品だと思います。 http://stackoverflow.com/a/7706175/4475605 – Adrian

答えて

1

まず、あなたのビューコントローラは、スクロールビューとテーブルビューの両方からイベントを取得するように、あなたはデリゲートが設定されていることを確認してください。

次に、参照を保持して、2つのビューを区別できるようにしてください。

最後に、どのリファレンスがviewdidscroll関数をトリガーしているのか確認し、そこでコードを実行します。

let view1:UIScrollView! 
let view2:UITableView! 

view1.delegate = self 
view2.delegate = self 

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    if scrollView == view1 { 
     // Do something 
    } 
    if scrollView == view2 { 
     // Do something 
    } 
} 
+0

これは完全にありがとうございます。私はそれを考えなかったとは信じられない –

関連する問題