0

AQGridview は UITableView から多くのアイデアを借りているため、答えは両方に当てはまるはずです。

内部に次のオブジェクトを含むカスタム セルがあります。

  • ラベル
  • お気に入りのボタン (ユーザーがオン/オフを切り替えることができ、私は .selected = YES/NO を使用します)

問題は、スクロール時にボタンの状態を維持することです。以下は私の「cellForItemAtIndex」メソッドです。

- (AQGridViewCell *) gridView: (AQGridView *) aGridView cellForItemAtIndex: (NSUInteger) index
{
    static NSString * cellIdentifier = @"CellIdentifier";

    SampleGridViewCell * cell = (SampleGridViewCell *)[aGridView dequeueReusableCellWithIdentifier:cellIdentifier];

    if ( cell == nil )
    {
        cell = [[SampleGridViewCell alloc] initWithFrame: CGRectMake(0.0, 0.0, 200, 60)                                   reuseIdentifier: cellIdentifier];
    }

    NSDictionary *item = [self.items objectAtIndex:index];

    NSString *title = [item objectForKey:@"title"];

    cell.index = index;

    cell.titleLabel.text = title;

    //cell.favButton.selected = (logic goes here);

    return cell;

}

このメソッドでセルが再作成されたときにボタンのオン/オフを切り替えることができるように、アイテムがお気に入りにされたときの参照をviewcontrollerに保持する必要があります。

vc のメソッドを使用して、cell.favButton で addTarget を実行しますか? しかし、ボタンのインデックスへの参照を取得するにはどうすればよいでしょうか?

誰かが似たようなものを実装しましたか?

4

1 に答える 1

0

あなたが言ったように、あなたが望むメソッドにあなたのボタンにターゲットを追加してください。そのメソッドでは、次を使用して行インデックスを取得できます。

              NSSet *touches = [event allTouches];
              UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:tableview];
      NSIndexPath *indexPath = [tableview indexPathForRowAtPoint: currentTouchPosition];
              NSUInteger row = [indexPath row];

そこから、テーブル自体で使用されている既存のデータセットにボタンが押されたことを保存できます。次に、テーブルが読み込まれ、データを取得したら、その行に保存したデータに基づいてセルボタンを有効/無効にするだけです:)

于 2012-08-20T09:13:39.110 に答える