2012-04-21 1 views
2

저는 아이폰 개발에 대해 처음이고, UITableViewCell을 사용하여 "친구 초대"시스템을 만들려고합니다. 다른 게시물을 확인했지만 해결 방법을 모르겠습니다. 지금 당장 가지고있는 한 가지 문제는 내 UITableViewCell 액세서리가 반복되고 있다는 것입니다. 예를 들면. 이 확인란을 클릭하면 사람이UITableViewCell imageView 반복

enter image description here

보고 결정하면 여기

http://min.us/mCHcd3kwI

내 프로젝트 링크를 내가 아래로 스크롤하면, 다른 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

애플이 오른쪽에 표시 인덱스와 함께 그룹화 된 테이블 뷰 스타일을 사용하지 않는 것이 좋습니다 : 내 모국어가 아닌. IMO 맞아, 못생긴 것 같아. –

+0

배열'content'는 무엇을 표현하며, 배열'aArray','bArray','cArray' 등과 어떻게 관련이 있습니까? – jonkroll

+0

"content"는 주소록의 성/이름 속성, aArray, bArray, cArray 등으로 가득 찬 배열입니다. 해당 알파벳으로 시작하는 성의 목록입니다. –

답변

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]"]; 
} 

이로 교체 : 당신의 그룹화 스타일을 사용하는 경우

- (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' 속성의 값을 명시 적으로 설정하고 있습니다. 그가 자신의 imageView를 추가했다면, 셀이 재사용 될 때 문제를 제거 할 필요가 있다는 것에 동의 하겠지만,이 경우에는 그렇게 생각하지 않습니다. – jonkroll

+0

아. 나는 모든 스위치 등을 실제로 읽지는 않았다. : p –

0

것은 그들이 모든 섹션이 때문에 제대로 인덱싱을 처리 할 수 ​​있는지 확인하십시오 (당신은 속성 self.selectedIndexPaths으로 당신에게 NSMutableSet을 한 가정) 동일한 유형의 색인 생성은 U 개의 섹션이 2 개 있고,이 두 섹션에서 index.row는 모든 섹션에 대해 0,1,2를 제공합니다.

또한 재사용 가능한 속성 즉, 그 세포들만이 창조한다. hich는 현재 visisble이고 다시 u scrll 할 때 테이블을 재사용 할 때 u가 이전에 셀을 확인한 후에 선택되지 않은 것으로 표시됩니다. 이 내 나쁜 영어 원인 미안 도움이 될 것입니다

희망이