7

NSStrings私は、 one UILabel& aの配列を持っていUICollectionViewます。

私の質問:

配列の数で がいくつあるかを判断したいUICollectionViewCell

それぞれUICollectionViewCellにボタンが含まれています。クリックすると、このボタンでUICollectionViewCellの番号に対応する配列内のデータがラベルに表示されるようにします。

たとえば、ユーザーが 13 番目UICollectionViewCellのボタンをクリックNSStringすると、配列の 13 番目がUILabelのテキストになります。

私がやった事:

UICollectionViewCellすべての s に使用する nib ファイル用の独自のサブクラスを作成UICollectionViewCellし、ボタンを .h ファイルに .h ファイルに接続しましたIBAction。もインポートしました。これは、 sMainViewController.hを格納する配列プロパティを含むものです。NSString

のアクションでコードを編集するとUICollectionViewCell、配列プロパティにアクセスできません。ボタンは機能します - のメソッドに NSLog を配置しましたがIBAction、これは機能します。

SOに関する他の何十もの回答を検索しましたが、私の特定の質問に答えるものはありません。リクエストがあれば、コードのサンプルでこれを更新できます。

4

3 に答える 3

15

すべての UICollectionViewCell に使用する nib ファイル用の UICollectionViewCell の独自のサブクラスを作成し、ボタンを IBAction として .h ファイルに接続しました。

IBAction を collectionViewCell のサブクラスに接続する場合は、デリゲートを作成して、データを表示する viewController でタッチ イベントを使用できるようにする必要があります。

簡単な調整の 1 つは、ボタンを collectionViewCell に追加し、その IBOutlet をセルに接続することです。しかし、IBAction ではありません。cellForRowAtIndexPath: collectionViewを含むそのviewControllerのボタンのeventHandlerを追加します。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    //Dequeue your cell

    [cell.button addTarget:self 
                    action:@selector(collectionViewCellButtonPressed:)
          forControlEvents:UIControlEventTouchUpInside];

    return cell;

}


- (IBAction)collectionViewCellButtonPressed:(UIButton *)button{

    //Acccess the cell
    UICollectionViewCell *cell = button.superView.superView;

    NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];

    NSString *title = self.strings[indexPath.row];

    self.someLabel.text = title;

}
于 2013-05-09T03:50:20.400 に答える
0

UICollectionViewCell のアクションでコードを編集すると、配列プロパティにアクセスできません。

これは、ボタン アクションを「間違った」オブジェクトに接続したためです。MainViewController (または配列プロパティにアクセスできる人) に接続する必要があります。

実行するタスクがいくつかあります。

  • ボタン アクション メッセージを受け取ります。

  • 配列 (データのモデル) にアクセスします。

  • どのセルにラベルを表示するかを示すスイッチを投げます。

  • コレクション ビューを に伝え、reloadDataセルを更新します。

これらのタスクはすべて、1 つのオブジェクトに属するのが最も便利です。これが MainViewController であると想定しています (したがって、MainViewController がコレクション ビューのデリゲート/データソースであると想定しています)。

于 2013-05-09T02:14:53.247 に答える