在TableView中滚动委托

时间:2016-05-03 09:19:10

标签: swift uitableview

我想像这个链接制作一个动画:

https://www.pinterest.com/pin/420523683937443901/sent/?sender=335307272165049646&invite_code=f63f81c77d28a48e6181db7df90b423a

以下是我的简单截图:

enter image description here

在我的情况下,我想要在向上滑动时,蓝色标题视图将消失,导航栏将变为蓝色。

这是我的代码:

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var tableView: UITableView!
    @IBOutlet var headerView: UIView!

    var dataSource: [String] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14].map {"\($0)"}

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.dataSource = self
        tableView.delegate = self
        headerView.backgroundColor = UIColor.blueColor()
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
        cell.textLabel!.text = dataSource[indexPath.row]
        return cell
    }

}

我可以使用这样的动画更改视图,包括:导航栏,TableView的标题视图,状态栏。

但是如何检查TableView向下滚动的时间,那么Header View将会改变。

1 个答案:

答案 0 :(得分:3)

您必须在tableView中使用UIScrollViewDelegate来拦截scrollView操作:

class YourClass: YourType, UIScrollViewDelegate {}

检查official apple documentation

您可以处理查看scrollViewDidScroll(_:)方法的scrollview。

这只是在用户滚动到最后添加更多网络数据的示例,您可以使用它来触发标题动画。

let threshold = 100.0 // threshold from bottom of tableView
var isLoadingMore = false // flag

func scrollViewDidScroll(scrollView: UIScrollView) {
    let contentOffset = scrollView.contentOffset.y
    let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;

    if !isLoadingMore && (maximumOffset - contentOffset <= threshold) {
        // Get more data - API call
        self.isLoadingMore = true

        // Update UI
        dispatch_async(dispatch_get_main_queue()) {
            tableView.reloadData()
            self.isLoadingMore = false
        }
    }
}

<强>更新

通过分析你的动画,这不是简单但不是不可能的:) 我可以看到两种不同的状态:

enter image description here

第二个州:

enter image description here

您可以通过选择UIViewController类型来整理控制器。 这个UIViewController必须由:

组成
  • - UINavigationController (如图所示,您可以选择是否要嵌入它或链接导航控制器并将viewController设置为导航 RootViewController的)
  • - UIPageView (您可以在主视图中使用UIPageViewControllerDataSource和UIPageViewControllerDelegate,注意尺寸,它覆盖控制器顶部的30%)
  • - UITableView (这是最后一个布局部分,每次页面滚动,数据源都可以更改并刷新到表格中)

P.S。 tableViewHeader可以是日期:2016年1月21日星期四的灰色标签,因为您可以看到在动画期间尺寸不会改变。