【发布时间】:2020-03-25 14:58:42
【问题描述】:
我需要根据用户选择的单元格获取数据。当我集成分段控制时,我开始遇到问题。当用户选择女性/男性时。主页 UI 将根据在段控件上选择的索引进行更改。我目前遇到的问题是用户确实选择了一个单元格。我不确定我是否正确使用了switch 语句,但是没有获取帖子。我什至在数据库中确保每个类别都有一张要获取的虚拟照片。
这是主页的代码,可以正常工作,但代码可能与某些相关。
现在根据下面的答案编辑代码
在didSelect 上,我现在收到一个错误提示
无法将“字符串”类型的值分配给“趋势”类型?
我认为通过将 name 添加到 vc.trend 将能够获取数据,因为在我们实现分段控制之前,didSelect 仅使用趋势名称就可以正常工作,然后我们将根据趋势名称。
case 0: vc.trend.name = femaleTrends[indexPath.row]
case 1: vc.trend.name = maleTrends[indexPath.row]
var selectedSegmentIndex = 0
var header: HomeViewHeaderReusableView?
// Reload data when index changes
func handleSegControlTapped(for header: HomeViewHeaderReusableView) {
selectedSegmentIndex = header.segmentedControl!.selectedSegmentIndex
collectionView.reloadData()
}
// Return the number of trend categories availabe
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
switch selectedSegmentIndex {
case 0: return femaleTrends.count
case 1: return maleTrends.count
default: print("opps, cant load data")
return 0
}
}
//Display the current trend image place holder and labels
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "homeViewCell", for: indexPath) as! CurrentTrendsCell
switch selectedSegmentIndex {
case 0: cell.trendsLabel.text = femaleTrends[indexPath.row]
cell.trendsImageView.image = femaleImages[indexPath.row]
case 1: cell.trendsLabel.text = maleTrends[indexPath.row]
cell.trendsImageView.image = maleImages[indexPath.row]
default: break
}
return cell
}
// Selected HomeView Cell data will pass to second home view controller
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "selectedHomeCellView") as! SelectedCellHomeViewController
switch selectedSegmentIndex {
case 0: vc.trend = femaleTrends[indexPath.row]
case 1: vc.trend = maleTrends[indexPath.row]
default: break
}
self.navigationController?.pushViewController(vc, animated: true)
self.navigationController?.navigationBar.backIndicatorImage = #imageLiteral(resourceName: "BackButton")
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: nil, style: UIBarButtonItem.Style.plain, target: nil, action: nil)
}
这是有问题的 viewController 代码
// Display uploaded photos
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return posts.count
}
// Get a photo cell
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "userPhotos", for: indexPath) as! PostCollectionViewCell
cell.posts = posts[indexPath.item]
return cell
}
var trend: Trend!
func fetchPosts() {
print("fetching post")
self.trendDetails = trend.details
self.trendName = trend.name
switch trend.gender {
case .female:
FEMALE_TRENDS_REF.child((trend.childValue)).observe(.childAdded) { (snapshot) in
let postId = snapshot.key
Database.fetchPost(with: postId, completion: { (post) in
self.posts.append(post)
self.posts.sort(by: { (post1, post2) -> Bool in
return post1.creationDate > post2.creationDate
})
self.collectionView?.reloadData()
})
}
case .male:
MALE_TRENDS_REF.child((trend.childValue)).observe(.childAdded) { (snapshot) in
let postId = snapshot.key
Database.fetchPost(with: postId, completion: { (post) in
self.posts.append(post)
self.posts.sort(by: { (post1, post2) -> Bool in
return post1.creationDate > post2.creationDate
})
self.collectionView?.reloadData()
})
}
}
}
let femaleTrends = [
Trend(name: "Animal Prints", details: "girl prints", image: UIImage(named: "Animal Prints"), gender: .female, childValue: "animalprints"),
Trend(name: "Dark Romance", details: "Darkromance text.",image: UIImage(named: "Dark Romance"),gender: .female, childValue: "darkromance"),
Trend(name: "Green", details: "Green text.",image: UIImage(named: "Green"),gender: .female, childValue: "green"),]
let maleTrends = [
Trend(name: "Animal Prints", details: "mens animal prints",image:UIImage(named: "Aprint"),gender: .male , childValue: "animalprints"),
Trend(name: "Corduroy", details: "mens corduroy",image: UIImage(named: "CorduroyM"),gender: .male, childValue: "corduroy"),
Trend(name: "Earth Tones", details: "mens earth tones",image: UIImage(named: "Earth Tones"),gender: .male, childValue: "earthtones"),
]
我基本上是想根据趋势名称和segmentIndex来获取数据..
【问题讨论】:
-
youtube.com/watch?v=GHYojHVey7s&t=3s 请注意这可能对你有帮助。
标签: ios swift firebase-realtime-database uicollectionview uisegmentedcontrol