Как изменить свойство в моем UICollectionViewCell?

57
5

Я хочу изменить свойство isEditable в моем контроллере HomeCollectionViewCell, когда я долгое время нажимаю свой HomeCollectionView. Однако я могу установить их только в методе cellForItemAtIndexPath. Я хочу установить их в методе handleLongPress.

вот моя собственность в HomeCollectionViewCell

var isEditable:Bool = false {
didSet {
updateUI()
}
}

func updateUI(){
videoImage.image! = videoInformation.featuredImage
videoImage.contentMode = .ScaleAspectFill
videoTitle.text! = videoInformation.title
if isEditable {
deleteButton.hidden = false
} else {
deleteButton.hidden = true
}
}

вот мой метод handleLongPress:

func editVideoFiles(sender: UILongPressGestureRecognizer) {
if sender.state == UIGestureRecognizerState.Began{
let p:CGPoint = sender.locationInView(self.collectionView)
let index: NSIndexPath = self.collectionView.indexPathForItemAtPoint(p)!
if let cell = self.collectionView.cellForItemAtIndexPath(index) {
//cell is the UICollectionViewCell, I do not know how to set the isEditable property by this.
}
}
}

спросил(а) 2016-05-10T21:13:00+03:00 4 года, 4 месяца назад
1
Решение
90

РЕШЕНИЕ:

func editVideoFiles(sender: UILongPressGestureRecognizer) {
if sender.state == UIGestureRecognizerState.Began{
let p:CGPoint = sender.locationInView(self.collectionView)
let index: NSIndexPath = self.collectionView.indexPathForItemAtPoint(p)!
if let cell = self.collectionView.cellForItemAtIndexPath(index) as? HomeCollectionViewCell {
cell.isEditable = true.
}
}
}

ПОЧЕМУ ЭТО РАБОТАЕТ:

isEditable существует только в вашем классе HomeCollectionViewCell (потому что вы определили его там).

Вы можете получить доступ к свойству из другого класса, вызвав его в экземпляре этого другого класса. Вы могли бы подумать, class.property будет работать class.property (который здесь: HomeCollectionViewCell.isEditable).

Но вам нужно вызвать свойство в INSTANCE класса, что означает, что HomeCollectionViewCell.isEditable не будет работать. Сначала нужно создать экземпляр класса:

let cell: HomeCollectionViewCell

Таким образом, вы можете:

cell.isEditable

Поэтому, отбрасывая свою cell (которая первоначально создавалась как CollectionViewCell) как HomeCollectionViewCell, теперь вы можете вызывать isEditable на cell и делать:

cell.isEditable = true

ответил(а) 2016-05-10T21:23:00+03:00 4 года, 4 месяца назад
-4

Вы должны переместить ячейку в HomeCollectionViewCell, тогда вы сможете использовать свою собственность.

if let cell = self.collectionView.cellForItemAtIndexPath(index) as? HomeCollectionViewCell {
cell.isEditable = true;
}

ответил(а) 2016-05-10T21:18:00+03:00 4 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема