2012-04-21 16 views
2

私はかなりiPhone開発に慣れていて、UITableViewCellを使用して自分の "招待する友達"システムを作成しようとしています。私は他の投稿をチェックしましたが、それを修正する方法はわかりません。私が今持っている1つの問題は、私のUITableViewCellアクセサリが繰り返されていることです。例えば。このチェックボックスをクリックするとここUITableViewCell imageViewを繰り返す

http://min.us/mCHcd3kwI は、誰もがそれを

enter image description here

を見てすることを決定し、私は下にスクロールする場合は、他のcheckboxsも

enter image description here

をマークされている場合、私は疑問に思って私のプロジェクトのリンクですどのように私はこれを修正することができます。あなたはセルあなたが/サブビューを削除ゼロに設定する必要があるたびに設定するとき

は、ここに私のコード

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
switch (section) { 
    case 0: 
     return 4; 
     break; 
    case 1: 
     return [aArray count]; 
     break; 
    case 2: 
     return [bArray count]; 
     break; 
    case 3: 
     return [cArray count]; 
     break; 
    case 4: 
     return [dArray count]; 
     break; 
    case 5: 
     return [eArray count]; 
     break; 
    case 6: 
     return [fArray count]; 
     break; 
    case 7: 
     return [gArray count]; 
     break; 
    case 8: 
     return [hArray count]; 
     break; 
    case 9: 
     return [iArray count]; 
     break; 
    case 10: 
     return [jArray count]; 
     break; 
    case 11: 
     return [kArray count]; 
     break; 
    case 12: 
     return [lArray count]; 
     break; 
    case 13: 
     return [mArray count]; 
     break; 
    case 14: 
     return [nArray count]; 
     break; 
    case 15: 
     return [oArray count]; 
     break; 
    case 16: 
     return [pArray count]; 
     break; 
    case 17: 
     return [qArray count]; 
     break; 
    case 18: 
     return [rArray count]; 
     break; 
    case 19: 
     return [sArray count]; 
     break; 
    case 20: 
     return [tArray count]; 
     break; 
    case 21: 
     return [uArray count]; 
     break; 
    case 22: 
     return [vArray count]; 
     break; 
    case 23: 
     return [wArray count]; 
     break; 
    case 24: 
     return [xArray count]; 
     break; 
    case 25: 
     return [yArray count]; 
     break; 
    case 26: 
     return [zArray count]; 
     break; 
}} 

-(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]; 
    } 
    NSString *group; 
    NSUInteger row = [indexPath row]; 
    cell.selectionStyle = UITableViewCellSelectionStyleGray; 


    if([selectedRowsArray containsObject:[content objectAtIndex:row]]){ 
     cell.imageView.image = [UIImage imageNamed:@"[email protected]"]; 
    }else { 
     cell.imageView.image = [UIImage imageNamed:@"[email protected]"]; 
    } 
    cell.imageView.userInteractionEnabled = YES; 


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleChecking:)]; 
    [cell.imageView addGestureRecognizer:tap]; 


    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; 
     case 6: 
      group = [fArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 7: 
      group = [gArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 8: 
      group = [hArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 9: 
      group = [iArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 10: 
      group = [jArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 11: 
      group = [kArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 12: 
      group = [lArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 13: 
      group = [mArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 14: 
      group = [nArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 15: 
      group = [oArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 16: 
      group = [pArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 17: 
      group = [qArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 18: 
      group = [rArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 19: 
      group = [sArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 20: 
      group = [tArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 21: 
      group = [uArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 22: 
      group = [vArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 23: 
      group = [wArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 24: 
      group = [xArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
     case 25: 
      group = [yArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 

     case 26: 
      group = [zArray objectAtIndex:row]; 
      cell.textLabel.text = group; 
      break; 
    } 

} 
return cell; 

}

+0

Appleは右側に示す指数との組み合わせでグループ化されたテーブルビュースタイルを使用することはお勧めしません。 IMO彼らは正しい、それは醜く見えるので。 –

+0

あなたの配列 'content'はどのような意味を持ち、配列' aArray'、 'bArray'、' cArray'などとの関係は? – jonkroll

+0

"content"は、アドレス帳、aArray、bArray、cArrayなどのfirst/last nameプロパティでいっぱいの配列です。そのアルファベットで始まる姓のリストです。 –

答えて

3

rowを保存しているだけで、セルがチェックされているかどうかを判断できないためです。すべてのセクションにインデックス0/1のセルがあるので、これは望むように機能しません。

if([selectedRowsArray containsObject:[content objectAtIndex:row]]){ 
    cell.imageView.image = [UIImage imageNamed:@"[email protected]"]; 
}else { 
    cell.imageView.image = [UIImage imageNamed:@"[email protected]"]; 
} 

これと交換してください:すべてのセクションがありますので、あなたは彼らが適切にインデックスを処理することを確認しグループ化されたスタイルを使用している場合(あなたが財産self.selectedIndexPathsとしてNSMutableSetを持っているあなたを想定)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    if ([self.selectedIndexPaths containsObject:indexPath]) 
    { 
     cell.imageView.image = [UIImage imageNamed:@"[email protected]"]; 
    } 
    else 
    { 
     cell.imageView.image = [UIImage imageNamed:@"[email protected]"]; 
    } 
    ... 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([self.selectedIndexPaths containsObject:indexPath]) 
    { 
     [self.selectedIndexPaths addObject:indexPath]; 
    } 
    else 
    { 
     [self.selectedIndexPaths removeObject:indexPath]; 
    } 

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
} 
+0

は私のためには機能しませんでした。私が調べることのできるサンプル/オープンソースコードを知っていますか? –

+0

正確には機能しませんでしたか?多分あなたのプロジェクト全体を共有することはできますか?私はそれを見ることができます。 –

+0

http://min.us/mCHcd3kwIここに行きます –

0

です。テーブルビューで再利用されているため、「以前の」セルからのチェックマークです。

+0

彼は、 'cellForIndexPath:'が呼び出されるたびに、セルの既存の 'imageView.image'プロパティの値を明示的に設定しています。彼が自分のイメージを追加していたら、セルが再利用されたときに問題を取り除く必要があると私は同意するだろうが、この場合、私はそうは思わない。 – jonkroll

+0

ああ。私は実際にすべてのスイッチなどを読み取っていませんでした。 :p –

0

同じ種類のインデックス作成の場合は、2つのセクションが3つの行にある場合は、これらの2つのセクションでindex.rowはすべてのセクションに対して0,1,2を与えます。

また、セルの再利用可能なプロパティそれらの細胞だけを生み出すあなたは以前チェックされたあなたの前のセルに戻ってスクロールするとき、それがチェックされているが、チェックされていないとしてあなたが表示されますので、現在visisbleしているし、再びそれらを再使用します。これは、それは私の母国語ではない私の悪い英語の原因について、あなたは申し訳ありませんが役立ちます

希望:)

関連する問題