Reputation: 829
In profile screen retrieve data from firestore of user name, email id, car category. Here car category are compact, small, midsize and full. And storing carCategory parameter value as String (i.e: CarCategory: "1" that means car category is "0" then its compact car if car category value is "1" then its small).
In user update page, car category is a collection view flow layout is carousel view
if car category cell index path value is 1 then it show cell details without scrolling.
Here is the screenshot of which i excepting ::
My question is how to load specific cell index in collection view cell.
Here is the code which i have tried so far::
**collection view and carousel view**
var car = [String]()
var carCategory = [ "Compact","small", "Midsize", "Full", "Van/Pick-up" ]
var carCategoryImage = ["compactCar", "smallCar", "mediumCar", "fullCar", "vanPickup"]
var carCategoryMeter = ["3.5 - 4.5m", "2.5 - 3.5m", "4 - 5m", "5 - 5.5m", "5.5 - 6.5m"]
var carCategoryLabel: UILabel?
var carMetersLabel: UILabel?
var carCategoryImageLabel: UIImageView?
var currentPageValue: String?
var currentCell: Int?
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return carCategory.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! carCollectionSettingCollectionViewCell
cell.carName.text = carCategory[indexPath.row]
print("carcategoryIndex\(carCategory)")
cell.carImage.image = UIImage(named: carCategoryImage[indexPath.row])
cell.carMeters.text = carCategoryMeter[indexPath.row]
return cell
}
fileprivate var pageSize: CGSize {
let layout = self.carCollection.collectionViewLayout as! UPCarouselFlowLayout
var pageSize = layout.itemSize
if layout.scrollDirection == .horizontal {
pageSize.width += layout.minimumLineSpacing
} else {
pageSize.height += layout.minimumLineSpacing
}
return pageSize
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let layout = carCollection.collectionViewLayout as! UPCarouselFlowLayout
let pageSide = (layout.scrollDirection == .horizontal) ? self.pageSize.width : self.pageSize.height
let offset = (layout.scrollDirection == .horizontal) ? scrollView.contentOffset.x : scrollView.contentOffset.y
currentPage = Int(floor((offset - pageSide / 2) / pageSide) + 1)
print("currentpage::::\(currentPage)")
}
fileprivate var currentPage: Int! {
didSet {
currentPage = self.currentCell
print("currentapge::::\(currentPage)")
let character = self.carCategory[self.currentPage!]
print("character::::\(character)")
}
}
func loadUserData(){
API.User.observeCurrentUser { (user) in
if self.userName.text != nil {
self.userName.text = user.username
print("username:::\(String(describing: user.username))")
}
if let photoUrlString = user.profileImageURL {
let photoUrl = URL(string: photoUrlString)
self.profileImage.sd_setImage(with: photoUrl)
}
if self.email.text != nil {
self.email.text = user.email
}
switch user.carCategory {
case "0":
self.carCategoryLabel?.text = "Compact"
self.carMetersLabel?.text = "3.5 - 4.5m"
self.carCategoryImageLabel?.image = UIImage(named: "compactCar")
self.currentCell = 0
print("currentCell:::\(String(describing: self.currentCell))")
self.carCollection.reloadData()
case "1":
self.carCategoryLabel?.text = "Small"
self.carMetersLabel?.text = "2.5 - 3.5m"
self.carCategoryImageLabel?.image = UIImage(named: "smallCar")
self.carCategoryLabel?.text = "1"
self.currentCell = 1
print("currentCell:::\(String(describing: self.currentCell))")
self.carCollection.reloadData()
case "2":
self.carCategoryLabel?.text = "Midsize"
self.carMetersLabel?.text = "4 - 5m"
self.carCategoryImageLabel?.image = UIImage(named: "mediumCar")
self.currentCell = 2
print("currentCell:::\(String(describing: self.currentCell))")
self.carCollection.reloadData()
case "3":
self.carCategoryLabel?.text = "Full"
self.carMetersLabel?.text = "5 - 5.5m"
self.carCategoryImageLabel?.image = UIImage(named: "fullCar")
self.currentCell = 3
print("currentCell:::\(String(describing: self.currentCell))")
self.carCollection.reloadData()
case "4":
self.carCategoryLabel?.text = "Van/Pick-up"
self.carMetersLabel?.text = "5.5 - 6.5m"
self.carCategoryImageLabel?.image = UIImage(named: "vanPickup")
self.currentCell = 4
print("currentCell:::\(String(describing: self.currentCell))")
self.carCollection.reloadData()
default:
self.carCategoryLabel?.text = ""
self.carMetersLabel?.text = ""
self.carCategoryImageLabel?.image = UIImage(named: "")
break
}
}
}//loaduserData
Upvotes: 0
Views: 6235
Reputation: 2038
Here is how this can be done:
override func viewDidLoad() {
super.viewDidLoad()
collectionView.selectItem(at: [0, currentCell], animated: false, scrollPosition: .centeredHorizontally)
}
When you load your viewController, I assume you set up the currentCell? I can't see your original viewDidLoad()
or viewDidAppear()
functions. If you instantiate this viewController from a previous viewController, then set your currentCell from there. If you segue to this viewController, set it in the prepareForSegue
method.
Upvotes: 3
Reputation: 7
The code below might help you in this scenerio
// MARK: - Collectionview delegates
extension FaqcategoriesViewController : UICollectionViewDelegate, UICollectionViewDataSource , UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return (Global.shared.FAQsCategoriesList?.list.count)!
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "faqcategoriesCollectioncell",
for: indexPath) as! FAQCategoryCollectionViewCell
cell.configure(data: (Global.shared.FAQsCategoriesList?.list[indexPath.row])!)
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let storyBoard = Utilities.getStoryboard(name: SBMEMBERSANDCOMMISSIONS)
let nextView = storyBoard.instantiateViewController(withIdentifier: "faq") as! FAQViewController
nextView.id = indexPath.row
self.navigationController?.pushViewController(nextView, animated: false)
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
let collectionViewSize = collectionView.frame.size.width
print(self.view.frame.width)
print(collectionView.frame.size.width)
print( "width: \(collectionViewSize/2 - 20) height: \(collectionView.frame.size.height/3.3)")
return CGSize(width: collectionViewSize/2 - 5, height: collectionView.frame.size.height/3.3)
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 1.0
}
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 1.0
}
}
Upvotes: 1