2012-12-20 31 views
5

C'è un modo per ottenere l'evento clic del pulsante da un pulsante all'interno di un UICollectionViewCell? Ho usato un pennino per popolare la vista dell'insieme, la cella ha il pulsante ma la sua azione non viene chiamata. Penso che il problema sia con la chiamata del delegato. Come posso risolvere questo?Fai clic sul pulsante in UICollectionView

Come ho creato:

  1. Aggiunto un pennino vuoto, ha creato una cellula di vista collezione
  2. Aggiunta una .he di file .m e reso proprietario file del pennino in cella come la classe creata
  3. Ha scritto un'azione nella classe.
  4. collegato il pulsante per l'azione

C'è un modo per ottenere l'azione? Cosa sto sbagliando?

+0

Hai la funzione Fileowner? Prova a rimuovere il link all'azione e riconnetterlo. –

+0

Modificata la domanda –

+0

Chiudi richiesta? Perché? Oh ok Modificato –

risposta

10

aggiungere l'azione pulsante mi piace questo:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CellId" forIndexPath:[indexPath row]]; 

    [[cell myButton] addTarget:self action:@selector(myClickEvent:event:) forControlEvents:UIControlEventTouchUpInside]; 

    return cell; 

} 


- (IBAction)myClickEvent:(id)sender event:(id)event { 

    NSSet *touches = [event allTouches]; 

    UITouch *touch = [touches anyObject]; 

    CGPoint currentTouchPosition = [touch locationInView:_myCollectionArray]; 

    NSIndexPath *indexPath = [_myCollectionArray indexPathForItemAtPoint: currentTouchPosition]; 

} 
+1

Questo codice non è necessario è possibile solo con Pennino. – MacMark

20

E 'importante che si crea la cella nella pennino trascinando un "Raccolta delle cellule di vista" dal pannello Oggetti. Se utilizzi un UIView e modifichi semplicemente la classe per questa cella in Identity Inspector, l'azione non funzionerà.

+0

Questo era il mio problema esatto. Sono contento di aver trovato questo suggerimento. – Hendrix

1

Ecco rapida 3.1 codice

// make a cell for each cell index path 
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    // get a reference to our storyboard cell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! BlueCircleViewCell 

    // Use the outlet in our custom class to get a reference to the UILabel in the cell 
    cell.bgImage.image = UIImage(named: items[indexPath.row]) 
    cell.addButton.addTarget(self, action: #selector(addCircle(_:)), for: .touchUpInside) 

//  cell.backgroundColor = UIColor.cyan // make cell more visible in our example project 

    return cell 
} 

func addCircle(_ sender:UIButton){ 
    //CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView]; 
    let buttonPosition:CGPoint = sender.convert(.zero, to: self.collectionView) 
    let indexPath:IndexPath = self.collectionView.indexPathForItem(at: buttonPosition)! 
    onAddBlueCircle(indexPath: indexPath) 
} 
Problemi correlati