2011-06-27 17 views
1

UITableViewの各セルでラジオボタン未チェックの画像として3つのUIButtonを追加しました。誰かがクリックするとボタン画像がラジオボタンの画像に変わります。私がUITableViewをスクロールしているときに、スクロールしている間、チェックされたボタンの画像が消去されています。UITableViewCell上のボタン画像がスクロール中に消去されています

誰かが私に何か考えを与えることができます..!

このIはUIButtons

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *CellIdentifier = @"Cell"; 
static NSString *CellSetup = @"CellSetup"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellSetup] autorelease]; 
} 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 
cell.tag=[indexPath row]; 

myButton = [[UIButton alloc]initWithFrame:CGRectMake(20, 20, 20, 20)]; 
[myButton setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal]; 
[myButton addTarget:self action:@selector(selectRadioButon:) forControlEvents:UIControlEventTouchUpInside]; 
myButton.tag = ++tagCount; 
[cell.contentView addSubview:myButton]; 
tagCount++; 

myButton2 = [[UIButton alloc]initWithFrame:CGRectMake(80, 20, 20, 20)]; 
[myButton2 setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal]; 
[myButton2 addTarget:self action:@selector(selectRadioButon:) forControlEvents:UIControlEventTouchUpInside]; 
myButton2.tag = tagCount; 
[cell.contentView addSubview:myButton2]; 
tagCount++; 

myButton3 = [[UIButton alloc]initWithFrame:CGRectMake(140, 20, 20, 20)]; 
[myButton3 setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal]; 
[myButton3 addTarget:self action:@selector(selectRadioButon:) forControlEvents:UIControlEventTouchUpInside]; 
myButton3.tag = tagCount; 
[cell.contentView addSubview:myButton3]; 
return cell;} 

を宣言したコード - (ボイド)selectRadioButon:(ID)、送信者{

btnTag = [sender tag]; 
NSArray *arr = self.view.subviews; 
UITableView *tblCell = [arr objectAtIndex:0]; 
NSArray *cellAry = tblCell.subviews; 

for (int i = 0; i <[cellAry count]; i++) { 
    UITableViewCell *content = [cellAry objectAtIndex:i]; 
    NSArray *contentAry = content.contentView.subviews; 
    for (int j = 0; j <[contentAry count]; j++) { 
     UIButton *button = [contentAry objectAtIndex:j]; 
     if (btnTag == button.tag) { 
      for (int k = 0; k <[contentAry count]; k++) { 
       UIButton *button = [contentAry objectAtIndex:k]; 
       if (btnTag == button.tag) { 
        [button setImage:[UIImage imageNamed:@"radioselect.png"] forState:UIControlStateNormal]; 
       } 
       else 
        [button setImage:[UIImage imageNamed:@"radiounselect.png"] forState:UIControlStateNormal]; 
      } 
      return; 
     } 
    } 
} 
+0

ここで3つのUIButtonを追加していますか?どのような方法で? スクロール中に画像が消去されると、次のような方法で何か間違っているように聞こえます: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {} 'あなたのコードで 'UITableViewCell'を再利用しますか? – werner

+0

うんん、チェック可能なボタンを使ってテーブルをプログラミングするのに約5分掛かることは、テーブルセルがビューからスクロールするとすぐに破棄されるということです。セルに関連付けられた変更可能なデータ(チェックされたステータスなど)は、別の配列に格納する必要があります。最初に必要な配列のサイズがわからない場合は、NSMutableArrayを使用できます。 –

答えて

1

chcekedチェックを示すindexpath.rowを格納するための配列を使用ボックスはこのコードを参照してください

-(void)goodClick:(UIButton *)sender 
{ 
    NSString *index = sender.titleLabel.text ; 
    if([self.goodIndexArray containsObject:index]){ 
     //[sender setImage:[UIImage imageNamed:@"uncheckedRect.png"] forState:UIControlStateNormal]; 
     [self.goodIndexArray removeObject:index]; 

    } 
    else 
    { 
     //[sender setImage:[UIImage imageNamed:@"checkedRect.png"] forState:UIControlStateNormal]; 
     [self.goodIndexArray addObject:index]; 
     if([self.badIndexArray containsObject:index]) 
      [self.badIndexArray removeObject:index]; 

    } 
    [self done]; 
    [self.table reloadData]; 
} 

checboxボタンのセレクタとしてこのメ​​ソッドを追加し、ボタンindexPath.rowのタイトルを追加します。

これにより、チェックボックスをオンにしたセルを識別することができます。

そして、cellForRowAtIndexPathメソッドでチェックを実装します。

が、この君によると、あなたの問題が解決getを使用

if([self.goodIndexArray containsObject:[NSString stringWithFormat:@"%i",coun]]) 
      { 
       [goodButton setImage:[UIImage imageNamed:@"checkedRect.png"] forState:UIControlStateNormal]; 
      } 
      else 
       [goodButton setImage:[UIImage imageNamed:@"uncheckedRect.png"] forState:UIControlStateNormal]; 

このチェック条件を参照してください。

+0

上記のコードに従ってボタンを追加しましたが、100行あり –

+0

100行で問題ありません。現在の状況は何ですか、あなたの問題は解決されたかどうか。 – Ishu

+0

いいえ、私はあなたのコードに従って行うことができません。私は同じ問題に直面しています。私は私のボタンclickedイベントに使用したメソッドを参照してください。修正が必要な場合は、修正して教えてください。 –

関連する問題