为什么对于在cellForItemAt中将isSelected设置为true的单元格,未将UICollectionView设置为false?

时间:2017-03-26 04:56:48

标签: ios swift xcode uicollectionview

我正在使用默认选择规则的UICollectionView(仅限单个选择)。在我的自定义UICollectionViewCell课程中,我已经覆盖了isSelected,如此:

override var isSelected: Bool {
    didSet {
        self.backgroundColor = isSelected ? UIColor.gray : UIColor.white
    }
}

我还为我的视图控制器isSelected中的一个特定单元格设置了collection​View(_:​cell​For​Item​At:​),因为由于某种原因,该集合的selectItem()方法并不是cellForItemAt。在isSelected中工作。

这使我能够确保选择了这一个单元格,并且在整个视图中实际显示其集合之前已经更改了它的背景,但它产生了一个奇怪的问题。

当我开始点击其他收集单元并选择它们时,我从开始选择的一个单元格的背景颜色设置为白色。

然而,当我继续通过点击它们来按顺序选择不同的单元格时,将它们的背景颜色切换为白色就像预期一样,同时我在集合期间设置isSelected的一个单元格&#39 ; s的初始种群仍然是灰色的,除非我特意点击它,然后在另一个细胞中轻拍它。

任何人都可以帮我弄明白这是为什么吗?当我点击我在false中设置了isSelected属性的小区以外的其他小区时,为什么不将cellForItemAt设置为collection​View:​did​Deselect​Item​At​Index​Path:​

修改:我尝试实施isSelected,但它根本没有触发。因此,一方面,i was succesfull in ruinning rake db:dump sudo gem install mysql rake db:create the problem i am facing is while running rake db:schema:load i am getting the following error while running the above command ActiveRecord::StatementInvalid: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails: DROP TABLE `advance_salaries` CASCADE /home/vh/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:80:in `_query' /home/vh/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:80:in `block in query' /home/vh/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:79:in `handle_interrupt' /home/vh/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.21/lib/mysql2/client.rb:79:in `query'属性是明确设置的,因为该一个单元格的背景变为灰色,但另一方面,该集合似乎没有将该单元格视为已选中

1 个答案:

答案 0 :(得分:0)

在您编辑问题时,您可以使用此方法。

// change background color when user touches cell
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.backgroundColor = UIColor.gray
}

// change background color back when user releases touch
func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.backgroundColor = UIColor.white
}