【发布时间】:2020-03-20 10:39:11
【问题描述】:
我正在尝试根据段控件的索引更改 collectionView 的数据。当我运行我的代码时,我遇到了崩溃。有人可以告诉我我在这里做错了什么吗?我正在遵循我发现的不同方法。我在崩溃时得到的错误代码是
线程 1:EXC_BREAKPOINT(代码=1,子代码=0x1da72fde0)
当我尝试在段索引之间切换时发生错误。并发生在线上
cell.trendsLabel.text = maleTrends[indexPath.row]
的
func handleSegControlTapped(for header: HomeViewHeaderReusableView)
var header: HomeViewHeaderReusableView?
func handleSegControlTapped(for header: HomeViewHeaderReusableView) {
collectionView.reloadItems(at: collectionView.indexPathsForVisibleItems)
switch header.segmentedControl?.selectedSegmentIndex {
case 0:
print("Display female trends")
header.segmentedControl?.selectedSegmentIndex = 0
let indexPath = IndexPath()
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "homeViewCell", for: indexPath) as! CurrentTrendsCell
cell.trendsLabel.text = femaleTrends[indexPath.row]
cell.trendsImageView.image = femaleImages[indexPath.row]
case 1:
print("Display male trends")
header.segmentedControl?.selectedSegmentIndex = 1
let indexPath = IndexPath()
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "homeViewCell", for: indexPath) as! CurrentTrendsCell
cell.trendsLabel.text = maleTrends[indexPath.row]
cell.trendsImageView.image = maleImages[indexPath.row]
default:
break
}
collectionView.reloadData()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
let segmentedOutlet = header?.segmentedControl
switch segmentedOutlet?.selectedSegmentIndex {
case 0: return femaleTrends.count
case 1: return maleTrends.count
default: print("opps, cant load data")
}
return 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "homeViewCell", for: indexPath) as! CurrentTrendsCell
let segmentedOutlet = header?.segmentedControl
switch segmentedOutlet?.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
}
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "homeViewReuseCell", for: indexPath) as! HomeViewHeaderReusableView
headerView.delegate = self
return headerView
}
编辑
这是标题中的代码
class HomeViewHeaderReusableView: UICollectionReusableView {
@IBOutlet weak var segmentedControl: UISegmentedControl?
var delegate: HomeSegmentedControl?
// MARK: Handler
@objc func handleSegTapped() {
delegate?.handleSegControlTapped(for: self)
}
@IBAction func segmentedTapped(_ sender: Any) {
handleSegTapped()
// change data based on female / male
}
override func awakeFromNib() {
super.awakeFromNib()
segmentedControl?.tintColor = .clear
segmentedControl?.layer.borderColor = UIColor.clear.cgColor
segmentedControl?.setBackgroundImage(UIImage(), for: .normal, barMetrics: .default)
segmentedControl?.setTitleTextAttributes([
NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 11),
NSAttributedString.Key.foregroundColor: UIColor.lightGray
], for: .normal)
segmentedControl?.setTitleTextAttributes([
NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 11) ,
NSAttributedString.Key.foregroundColor: UIColor.white
], for: .selected)
segmentedControl?.selectedSegmentIndex = 0
}
【问题讨论】:
-
在标题参数中添加 segmentedControl 的位置
-
@Anbu.Karthik 更新问题
标签: ios swift uicollectionview uisegmentedcontrol