2012-12-20 10 views
5

Czy istnieje sposób, aby uzyskać kliknięcie przycisku zdarzenia z przycisku wewnątrz UICollectionViewCell? Użyłem stalówki do wypełnienia widoku kolekcji, komórka ma przycisk, ale jego akcja nie jest wywoływana. Myślę, że problem polega na tym, że delegat został wezwany. Jak mogę to naprawić?Kliknij przycisk Kliknij w UICollectionView

Jak przygotować:

  1. Dodany pusty stalówka, stworzył komórkę widok kolekcja
  2. dodał .h i .m pliku i wykonane plików właściciela stalówki komórkowego jako klasy stworzonej
  3. Wrote działanie w klasie.
  4. Połączenie przycisku do akcji

Czy istnieje sposób mogę uzyskać działanie? Co robię źle?

+0

mieć funkcję w fileowner? Spróbuj usunąć link do działania i ponownie go połącz. –

+0

Edytowane pytanie –

+0

Zamknij zapytanie? Czemu? No ok Edytowane –

Odpowiedz

10

Dodaj działanie przycisku tak:

- (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

Ten kod nie jest konieczny, możliwe tylko z końcówką. – MacMark

20

Ważne jest, aby stworzyć komórkę w stalówka przeciągając „Kolekcja Zobacz komórka” z panelu Obiekty. Jeśli użyjesz UIView i po prostu zmienisz klasę dla tej komórki w Inspektorze Tożsamości, akcja nie zadziała.

+0

To był mój dokładny problem. Cieszę się, że znalazłem tę sugestię. – Hendrix

1

Oto Swift 3.1 Kod

// 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) 
}