如何在UICollectionView加载上选择单元格

时间:2015-04-18 16:34:07

标签: ios iphone swift uicollectionview uicollectionviewcell

我正在加载一个集合视图,在单元格选择时,单元格在其视图上绘制一个圆圈(UIView + CGRect)以指示选择。此集合视图表示日历,我希望在初始加载时选择第一个日期。对于我的生活不能得到正确的加载,选择的代码不会触发,或者圆圈得到错误,因为出口没有在单元格上初始化(圆圈的位置依赖于标签的位置)。

这是我在单元格上的select方法,在集合视图数据源中选择单元格时调用:

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:)然后手动调用要选择的代码,但此时单元格尚未完全加载。我尝试在视图控制器的cellForItemAtIndexPathviewDidLoad中调用它,但没有运气。

关于如何在加载时选择单元格的任何建议都会很棒!感谢。

1 个答案:

答案 0 :(得分:1)

您应该使用selectedBackgroundView表示选择cell。以下是该属性的描述:

  

如果selectedBackgroundViewbackgroundView不同,则会将其置于背景视图上方,并在选择中设置动画。