2012-04-24 12 views
0

私はUITableViewCellでaccessoryViewとしてチェックボックスを持っています。チェックボックスをクリックすると、チェックマークが付けられ、逆も同様です。しかし、私がビューの外にスクロールしてスクロールバックすると、チェックボックスは消えてしまいます。 ボタンの状態を保存する方法は何ですか?UITableviewcellの状態を保存するaccessoryView

-(UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = nil; 

    if([tableView isEqual:self.myTableView]){ 
     static NSString *TableViewIdentifier = @"MyCells"; 
     cell = [tableView dequeueReusableCellWithIdentifier:TableViewIdentifier]; 
     if(cell == nil){ 
      cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:TableViewIdentifier]; 
     } 
     //configure the cell 
     checkbox = [UIButton buttonWithType:UIButtonTypeCustom]; 
     CGRect checkboxRect = CGRectMake(135, 150, 36, 36); 
     [checkbox setFrame:checkboxRect]; 
     [checkbox setImage:[UIImage imageNamed:@"[email protected]"]forState:UIControlStateNormal]; 
     [checkbox setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateSelected]; 

     /*if (checkbox.state == UIControlStateNormal) { 
      [checkbox setImage:[UIImage imageNamed:@"[email protected]"]forState:UIControlStateHighlighted]; 
     }else if(checkbox.state == UIControlStateSelected){ 
      [checkbox setImage:[UIImage imageNamed:@"[email protected]"]forState:UIControlStateHighlighted]; 
     }*/ 

     [checkbox addTarget:self action:@selector(checkboxClicked:) forControlEvents:UIControlEventTouchUpInside]; 
     cell.accessoryView = checkbox; 


     NSString *group; 
     NSUInteger row = [indexPath row]; 

     switch (indexPath.section) { 
      case 0: 
       group = [suggestedPeople objectAtIndex:row]; 
       cell.textLabel.text = group; 
       break; 
      case 1: 
       group = [aArray objectAtIndex:row]; 
       cell.textLabel.text = group; 
       break; 
      case 2: 
       group = [bArray objectAtIndex:row]; 
       cell.textLabel.text = group; 
       break; 
      case 3: 
       group = [cArray objectAtIndex:row]; 
       cell.textLabel.text = group; 
       break; 
      case 4: 
       group = [dArray objectAtIndex:row]; 
       cell.textLabel.text = group; 
       break; 
      case 5: 
       group = [eArray objectAtIndex:row]; 
       cell.textLabel.text = group; 
       break; 
     } 
    } 
    return cell; 
} 

編集:コードを投稿するための

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ 
if(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){ 
    checkbox = [UIButton buttonWithType:UIButtonTypeCustom]; 
    CGRect checkboxRect = CGRectMake(135, 150, 36, 36); 
    [checkbox setFrame:checkboxRect]; 
    [checkbox setImage:[UIImage imageNamed:@"[email protected]"]forState:UIControlStateNormal]; 
    [checkbox setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateSelected]; 

} 
return self;} 
+0

絶対に起きてはならないこと。いくつかのコードを投稿できますか?特にあなたのcellForRowAtIndexPath関数。 –

+0

ここにコード –

答えて

1

感謝。そうです、問題は、cellForRowAtIndexPathメソッドでUIButtonインスタンスを作成していることです。これは許可されていません(または、あなたが気付いたように、奇妙なことが起こります)。 TableViewCellサブクラスを作成してそこにボタンを追加するか、テーブルセルのXIBを作成してロードする必要があります。

はこれでいくつかの助けのために、この記事をチェックアウト:

http://forums.macrumors.com/showthread.php?t=545061

+0

を掲載しました。 –

+0

私は別のクラスを持って、それにUIbuttonを置く、私はどのような構文を私のViewControllerに追加するか尋ねることがありますか? –

+1

cellForRowAtIndexパスにセルのサブビューを作成/追加しても構いませんが、新しいサブビューにタグを与え、デキューがnilを返す場合にのみ行うようにしてください。デキューされたセルを取得した場合、それはすでに作成したもので、サブビューはviewWithTag:で作成されています。 – danh

関連する問題