如何在 UICollectionView 加载 select 单元格
How to select cell on UICollectionView load
我正在加载一个集合视图,其中在单元格 selection 上,单元格在其视图上绘制一个圆圈 (UIView + CGRect) 以指示 selection。这个集合视图代表一个日历,我希望第一个日期在最初加载时被 selected。对于我的生活无法正确加载,selection 的代码没有触发,或者圆圈绘制不正确,因为插座尚未在电池上初始化(圆圈的位置依赖于标签的位置)。
这是我在单元格上的 select 方法,它是在来自集合视图数据源的单元格 selection 上调用的:
func select() {
circleView = UIView(frame: CGRectMake(dateLabel.center.x - (dateLabel.frame.size.width / 2), dateLabel.center.y - (dateLabel.frame.size.height / 2), 40, 40))
circleView!.layer.cornerRadius = 20
circleView!.backgroundColor = UIColor.blueColor()
insertSubview(circleView!, atIndex: 0)
isCellSelected = true
}
这是我的 didSelectItemAtIndexPath
代码:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE MMMM dd, yyyy"
var dateString = ""
if let newDate = NSCalendar.currentCalendar().dateFromComponents(monthComponentsByDay[indexPath.row]) {
dateString = dateFormatter.stringFromDate(newDate)
delegate?.dateSelected(newDate)
}
if currentCell != nil {
currentCell!.deselect()
currentCell = nil
}
dateLabel.text = dateString
currentCell = collectionView.cellForItemAtIndexPath(indexPath) as? CalendarCollectionViewCell
currentCellIndex = indexPath.row
currentCell!.select()
}
我试过collectionView.selectItemAtIndexPath(indexPath:animated:scrollPosition:)
然后手动调用代码到select,但是那个时候单元格还没有完全加载。我尝试在视图控制器的 cellForItemAtIndexPath
和 viewDidLoad
中调用它,但没有成功。
任何关于如何 select 加载电池的建议都很棒!谢谢。
您应该使用 selectedBackgroundView
来表示您选择的 cell
。这是 属性:
的描述
If selectedBackgroundView
is different than backgroundView
, it will be placed above the background view and animated in on selection.
我正在加载一个集合视图,其中在单元格 selection 上,单元格在其视图上绘制一个圆圈 (UIView + CGRect) 以指示 selection。这个集合视图代表一个日历,我希望第一个日期在最初加载时被 selected。对于我的生活无法正确加载,selection 的代码没有触发,或者圆圈绘制不正确,因为插座尚未在电池上初始化(圆圈的位置依赖于标签的位置)。
这是我在单元格上的 select 方法,它是在来自集合视图数据源的单元格 selection 上调用的:
func select() {
circleView = UIView(frame: CGRectMake(dateLabel.center.x - (dateLabel.frame.size.width / 2), dateLabel.center.y - (dateLabel.frame.size.height / 2), 40, 40))
circleView!.layer.cornerRadius = 20
circleView!.backgroundColor = UIColor.blueColor()
insertSubview(circleView!, atIndex: 0)
isCellSelected = true
}
这是我的 didSelectItemAtIndexPath
代码:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEEE MMMM dd, yyyy"
var dateString = ""
if let newDate = NSCalendar.currentCalendar().dateFromComponents(monthComponentsByDay[indexPath.row]) {
dateString = dateFormatter.stringFromDate(newDate)
delegate?.dateSelected(newDate)
}
if currentCell != nil {
currentCell!.deselect()
currentCell = nil
}
dateLabel.text = dateString
currentCell = collectionView.cellForItemAtIndexPath(indexPath) as? CalendarCollectionViewCell
currentCellIndex = indexPath.row
currentCell!.select()
}
我试过collectionView.selectItemAtIndexPath(indexPath:animated:scrollPosition:)
然后手动调用代码到select,但是那个时候单元格还没有完全加载。我尝试在视图控制器的 cellForItemAtIndexPath
和 viewDidLoad
中调用它,但没有成功。
任何关于如何 select 加载电池的建议都很棒!谢谢。
您应该使用 selectedBackgroundView
来表示您选择的 cell
。这是 属性:
If
selectedBackgroundView
is different thanbackgroundView
, it will be placed above the background view and animated in on selection.