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
Scroll Multiple UICollectionView with one collectionview IOS
Manually scrolling two UICollectionViews showing the same content
Please have look my code
ViewController
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!
}
CategoryRow
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
}
}
Edit - 1
Link for project it may be helpful to understand the scenario
https://drive.google.com/file/d/0B0drBRiVjY71Tl9vUER6Zk44VFk/view?usp=sharing
Edit - 2 I have tried to implement below link but not able to do so
Synchronized horizontal scrolling of collection views in tableview rows
Thanks in advance
Thanks to @Impossible for help issue resolved now.
First I was set the tag
cell?.collection.tag
incellForRowAtIndexPath
ofUITableView
likeThen I get view by using tag method
viewWithTag
insidescrollViewDidScroll
likeSay that you have 2 collection views. What you can do is something like this.
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.