5

内のボタンからボタンクリックイベントを取得する方法はありますUICollectionViewCellか?ペン先を使用してコレクションビューにデータを入力しました。セルにはボタンがありますが、そのアクションは呼び出されません。問題は、代理人が呼ばれることにあると思います。どうすればこれを修正できますか?

私が作成した方法:

  1. 空のペン先を追加し、コレクションビューセルを作成しました
  2. .hおよび.mファイルを追加し、作成されたクラスとしてセルnibのファイルを所有者にしました
  3. クラスでアクションを書きました。
  4. ボタンをアクションに接続しました

アクションを取得する方法はありますか?私は何が間違っているのですか?

4

3 に答える 3

20

オブジェクトパネルから「コレクションビューセル」をドラッグして、ニブにセルを作成することが重要です。UIViewを使用していて、Identity Inspectorでこのセルのクラスを変更しただけの場合、アクションは機能しません。

于 2013-05-13T12:01:17.417 に答える
10

次のようなボタンアクションを追加します。

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

}
于 2012-12-20T07:40:19.320 に答える
4

これがSwift3.1コードです

// 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)
}
于 2017-07-31T06:30:33.137 に答える