web-dev-qa-db-ja.com

UICollectionViewCell Swiftカスタム選択状態の「選択」をオーバーライドしようとしています

UICollectionViewのセルにカスタム選択スタイルを実装しようとしています。 didSelectメソッドとdidDeSelectメソッドで手動でこれを簡単に行うことができますが、UICollectionViewCellで「選択」変数を操作することでこれを実現したいと思います。

私はこのコードを持っています:

    override var selected: Bool {
    get {
        return super.selected
    }
    set {
        if newValue {
            self.imageView.alpha = 0.5
            println("selected")
        } else if newValue == false {
            self.imageView.alpha = 1.0
            println("deselected")
        }
    }
}

セルを選択すると、セルが強調表示されますが、「選択」が2回印刷され、選択解除は機能しません(両方のUICollectionViewメソッドが実装されている場合でも)。

これについてどうすればいいですか?ありがとう!

23
Julius

そして、Swift 3.0:

override var isSelected: Bool {
    didSet {
        alpha = isSelected ? 0.5 : 1.0
    }
}
31

コードにステップインすることでそれを理解しました。問題は、super.selectedが変更されていないことでした。そこで、コードを次のように変更しました。

override var selected: Bool {
    get {
        return super.selected
    }
    set {
        if newValue {
            super.selected = true
            self.imageView.alpha = 0.5
            println("selected")
        } else if newValue == false {
            super.selected = false
            self.imageView.alpha = 1.0
            println("deselected")
        }
    }
}

今では機能しています。

27
Julius

これを試してください。

override var selected: Bool {
    didSet {
        self.alpha = self.selected ? 0.5 : 1.0
    }
}
13
osrl