Achieve button click in UICollectionView

前端 未结 3 711
Happy的楠姐
Happy的楠姐 2020-12-15 13:47

Is there a way I can get the button click event from a button inside a UICollectionViewCell? I used a nib to populate the collection view, the cell has the butt

相关标签:
3条回答
  • 2020-12-15 14:25

    Add the button action like this:

    - (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];
    
    }
    
    0 讨论(0)
  • 2020-12-15 14:30

    Here is swift 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)
    }
    
    0 讨论(0)
  • 2020-12-15 14:31

    It is important that you create the cell in the Nib by dragging a "Collection View Cell" from the Objects panel. If you use an UIView and just change the class for this cell in the Identity Inspector then the action will not work.

    0 讨论(0)
提交回复
热议问题