2012-12-20 27 views
5

Gibt es eine Möglichkeit, die Schaltfläche klicken Ereignis von einer Schaltfläche innerhalb einer UICollectionViewCell? Ich benutzte eine Feder, um die Sammlungsansicht zu füllen, die Zelle hat die Schaltfläche, aber ihre Aktion wird nicht aufgerufen. Ich denke, das Problem ist, dass der Delegierte angerufen wird. Wie kann ich das beheben?Klicken Sie auf Schaltfläche in UICollectionView

Wie ich erstellt:

  1. Added eine leere Spitze, erstellt eine Sammlung Sichtzelle
  2. Added eine .h und .m-Datei und machte die Dateien Besitzers Zellspitze als erstellte Klasse
  3. Schrieb eine Aktion in der Klasse.
  4. Verbunden die Schaltfläche, um die Aktion

Gibt es eine Weise, die ich die Aktion bekommen? Was mache ich falsch?

+0

Sie die Funktion in Fileowner haben? Bitte versuchen Sie den Link zur Aktion zu entfernen und verbinden Sie ihn erneut. –

+0

Bearbeitet die Frage –

+0

Anfrage schließen? Warum? Oh ok Bearbeitet –

Antwort

10

die Schaltfläche Aktion wie folgt hinzufügen:

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

Dieser Code ist nicht notwendig, es ist nur mit Nib möglich. – MacMark

20

Es ist wichtig, dass Sie die Zelle in der Nib erstellen, indem Sie eine „Sammlung Ansicht Cell“ aus der Objektpalette ziehen. Wenn Sie eine UIView verwenden und nur die Klasse für diese Zelle im Identity Inspector ändern, funktioniert die Aktion nicht.

+0

Das war mein genaues Problem. Ich bin froh, dass ich diesen Vorschlag gefunden habe. – Hendrix

1

Hier ist schnell 3.1 Code

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