一起水平滚动 UICollectionView 的所有行 [英] Horizontally scroll ALL rows of UICollectionView together

查看:17
本文介绍了一起水平滚动 UICollectionView 的所有行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 UITableView.在 UITableViewCell 中,我放置了 UICollectionView.目前所有的行都单独滚动.我需要的是,当用户以水平方式(从左到右或从右到左)滚动任何行时,所有行都必须以相同的模式滚动.

I have UITableView. Inside UITableViewCell I have placed UICollectionView. Currently all the row scrolling individually. What I need is when User scroll any row in horizontally manner (left to right or right to left) all the row must be scroll on same pattern.

我已经点击了下面的链接,但没有成功

I have followed the below link but no success

使用一个collectionview IOS滚动多个UICollectionView

手动滚动显示相同内容的两个 UICollectionView

请看我的代码

视图控制器

import UIKit

class ViewController: UIViewController, UITableViewDataSource {

    var categories = ["Header 1", "Header 2", "Header 3", "Header 4", "Header 5", "Header 6", "Header 7", "Header 8"]

    @IBOutlet var myTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        myTableView.dataSource = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return categories[section]
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return categories.count
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("cell") as? CategoryRow
        if cell == nil {
            cell = CategoryRow(style:UITableViewCellStyle.Subtitle, reuseIdentifier:"cell")
        }
        else {
        }
        cell!.tag = indexPath.section
        cell?.collection.reloadData()
        return cell!
    }
}

MyCollectionViewCell

import UIKit

class MyCollectionViewCell: UICollectionViewCell {

    @IBOutlet var title: UILabel!
    @IBOutlet var data: UILabel!
}

类别行

import UIKit

class CategoryRow: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UIScrollViewDelegate {

    var Title1 = ["1st Title 1", "1st Title 2", "1st Title 3", "1st Title 4", "1st Title 5", "1st Title 6", "1st Title 7", "1st Title 8"]
    var Data1 =  ["1st Data 1", "1st Data 2", "1st Data 3", "1st Data 4", "1st Data 5", "1st Data 6", "1st Data 7", "1st Data 8"]

    var Title2 = ["2nd Title 1", "2nd Title 2", "2nd Title 3", "2nd Title 4", "2nd Title 5", "2nd Title 6", "2nd Title 7", "2nd Title 8"]
    var Data2 =  ["2nd Data 1", "2nd Data 2", "2nd Data 3", "2nd Data 4", "2nd Data 5", "2nd Data 6", "2nd Data 7", "2nd Data 8"]

    var Title3 = ["3rd Title 1", "3rd Title 2", "3rd Title 3", "3rd Title 4", "3rd Title 5", "3rd Title 6", "3rd Title 7", "3rd Title 8"]
    var Data3 =  ["3rd Data 1", "3rd Data 2", "3rd Data 3", "3rd Data 4", "3rd Data 5", "3rd Data 6", "3rd Data 7", "3rd Data 8"]

    var Title4 = ["4th Title 1", "4th Title 2", "4th Title 3", "4th Title 4", "4th Title 5", "4th Title 6", "4th Title 7", "4th Title 8"]
    var Data4 =  ["4th Data 1", "4th Data 2", "4th Data 3", "4th Data 4", "4th Data 5", "4th Data 6", "4th Data 7", "4th Data 8"]

    var Title5 = ["5th Title 1", "5th Title 2", "5th Title 3", "5th Title 4", "5th Title 5", "5th Title 6", "5th Title 7", "5th Title 8"]
    var Data5 =  ["5th Data 1", "5th Data 2", "5th Data 3", "5th Data 4", "5th Data 5", "5th Data 6", "5th Data 7", "5th Data 8"]

    var Title6 = ["6th Title 1", "6th Title 2", "6th Title 3", "6th Title 4", "6th Title 5", "6th Title 6", "6th Title 7", "6th Title 8"]
    var Data6 =  ["6th Data 1", "6th Data 2", "6th Data 3", "6th Data 4", "6th Data 5", "6th Data 6", "6th Data 7", "6th Data 8"]

    var Title7 = ["7th Title 1", "7th Title 2", "7th Title 3", "7th Title 4", "7th Title 5", "7th Title 6", "7th Title 7", "7th Title 8"]
    var Data7 =  ["7th Data 1", "7th Data 2", "7th Data 3", "7th Data 4", "7th Data 5", "7th Data 6", "7th Data 7", "7th Data 8"]

    var Title8 = ["8th Title 1", "8th Title 2", "8th Title 3", "8th Title 4", "8th Title 5", "8th Title 6", "8th Title 7", "8th Title 8"]
    var Data8 =  ["8th Data 1", "8th Data 2", "8th Data 3", "8th Data 4", "8th Data 5", "8th Data 6", "8th Data 7", "8th Data 8"]

    @IBOutlet var collection: UICollectionView!


    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    func scrollViewDidScroll(scrollView: UIScrollView) {
        // Some logic here
    }


    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 8
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("videoCell", forIndexPath: indexPath) as! MyCollectionViewCell

        switch (self.tag) {
            case 0:
                cell.title.text = self.Title1[indexPath.row]
                cell.data.text = self.Data1[indexPath.row]
                break

            case 1:
                cell.title.text = self.Title2[indexPath.row]
                cell.data.text = self.Data2[indexPath.row]
                break

            case 2:
                cell.title.text = self.Title3[indexPath.row]
                cell.data.text = self.Data3[indexPath.row]
                break

            case 3:
                cell.title.text = self.Title4[indexPath.row]
                cell.data.text = self.Data4[indexPath.row]
                break

            case 4:
                cell.title.text = self.Title5[indexPath.row]
                cell.data.text = self.Data5[indexPath.row]
                break

            case 5:
                cell.title.text = self.Title6[indexPath.row]
                cell.data.text = self.Data6[indexPath.row]
                break

            case 6:
                cell.title.text = self.Title7[indexPath.row]
                cell.data.text = self.Data7[indexPath.row]
                break

            case 7:
                cell.title.text = self.Title8[indexPath.row]
                cell.data.text = self.Data8[indexPath.row]
                break

            default:
                break
        }
        return cell
    }
}

编辑 - 1

项目链接可能有助于理解场景

Link for project it may be helpful to understand the scenario

https://drive.google.com/file/d/0B0drBRiVjY71Tl9vUER6Zk44VFk/view?usp=sharing

编辑 - 2我试图实现以下链接,但无法实现

Edit - 2 I have tried to implement below link but not able to do so

tableview 行中集合视图的同步水平滚动

提前致谢

推荐答案

假设您有 2 个集合视图.你能做的就是这样.

Say that you have 2 collection views. What you can do is something like this.

// say cv0 and cv1 are outlets to two table views

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView == self.cv0 {
        self.cv1.contentOffset = self.cv0.contentOffset
    }
    else {
        if scrollView == self.tv1 {
            self.cv0.contentOffset = self.cv1.contentOffset
        }
    }
}

如果你想要更多的集合视图,你可以编写一个通用方法来处理它.您可以将 scrollView 传递给此方法,堆栈中的所有其他滚动视图 contentOffSet 都会相应设置.

If you want to it for more collection views you can write a generic method to handle it. You can pass scrollView to this method and all other scroll views in the stack contentOffSet is set accordingly.

这篇关于一起水平滚动 UICollectionView 的所有行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆