2016-12-08 2 views
2

Я пытаюсь создать UICollectionView с кнопками. Я могу установить названия кнопок, но целевое действие не работает. Ниже приведен мой код:Кнопка UICollectionView

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TVButtonCell", for: indexPath) as! TVButtonCell 
    cell.channelButton.setTitle(channelKeys[indexPath.row], for: .normal) 
    cell.channelButton.addTarget(self, action: #selector(FirstViewController.pressed(_:)), for: .primaryActionTriggered) 
    return cell 
} 

    func pressed(_ sender: AnyObject) { 
    print("Button pressed") 
} 

Кто-нибудь знает, что я делаю неправильно?

+0

делает ваш крах приложения, когда вы кнопку ударил? Можете ли вы пройти полную трассировку стека? – nitinsh99

+0

Я бы порекомендовал добавить IBActions в ячейку UICollectionView и иметь делегаты в ViewController – Nathaniel

+0

Альтернативно, может быть, это поможет вам: http://stackoverflow.com/questions/29610316/how-to-add-a-delete-button- to-collection-view-cell-in-swift? rq = 1 – Nathaniel

ответ

0

Черт, это необходимо, чтобы добавить следующую FUNC:

func collectionView(_ collectionView: UICollectionView, canFocusItemAt indexPath: IndexPath) -> Bool { 
    return false 
} 
0

вы должны использовать делегаты для вызова методов на viewcontrollers.

protocol TVButtonCellDelegate: class { 
    func buttonClicked() 
} 

затем создать слабую переменную на TVButtonCell для передачи делегата.

weak var delegate: TVButtonCellDelegate? 

, а также IBAction на tvbuttoncell для вызова метода внутри делегата

@IBAction func tvButtonClicked(sender: UIBUtton) { 
    delegate?. buttonClicked() 
} 

, то вы просто применить делегат firstviewcontroller

extension FirstViewController: TVButtonCellDelegate { 
    func buttonClicked() { 
     print("button clicked") 
    } 
} 

, а затем назначить firstcontroller к ячейке при создании один

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TVButtonCell", for: indexPath) as! TVButtonCell 
    cell.channelButton.setTitle(channelKeys[indexPath.row], for: .normal) 
    cell.delegate = self 
    return cell 
Смежные вопросы