2014-02-07 7 views
2

NIB에서 UITableViewCell 사용자 정의 UITableView을 생성했습니다. 보기 컨트롤러를로드 할 때 모든 것이 제대로 작동하는 것 같습니다. 그러나 내가 UITableView을 스크롤하기 시작하면 아무 이유없이 중간에 빈 셀이 나타나는 경우가 있습니다.사용자 정의 UITableViewCell 레이아웃 문제

나는 무슨 일이 일어나고 있는지 모른다. 내 cellForRowAtIndexPath은 아주 간단합니다. 하지만 사용자 정의 UITableViewCell에 제스처를 추가했습니다. 그것이 문제의 원인이 될 수 있습니까? 내 코드 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *tableIdentifier = @"FTStreamCell"; 
    FTStreamCell *cell = (FTStreamCell *)[tableView dequeueReusableCellWithIdentifier:tableIdentifier]; 
     if (cell == nil) 
     { 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FTStreamCell" owner:self options:nil]; 
      cell = [nib objectAtIndex:0]; 
     } 
     cell.selectionStyle = UITableViewCellSelectionStyleGray; 
     cell.delegate = self; 
     return cell; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    FTStreamCell *streamCell = (FTStreamCell*) cell; 
    if (!indexPath.section == 0) 
    { 
     if ((NSNull*)[[[self.cachedData objectForKey:kQuestions] objectAtIndex:indexPath.row] objectForKey:kQuestion] != [NSNull null]) 
      streamCell.question.text = [[[self.cachedData objectForKey:kQuestions] objectAtIndex:indexPath.row] objectForKey:kQuestion]; 
     streamCell.timePosted.text = [NSString stringWithFormat:@"Today at Bangalore, India"]; 
     // To Show My Questions 
     NSLog(@"Me %d", [[[NSUserDefaults standardUserDefaults] objectForKey:kUserId] integerValue]); 
     if ([[[self.cachedData objectForKey:kQuestions] objectAtIndex:indexPath.row] objectForKey:kUserId] == [[NSUserDefaults standardUserDefaults] objectForKey:kUserId]) 
     { 
      streamCell.mainView.backgroundColor = [UIColor colorWithRed:244.0f/255.0f green:240.0f/255.0f blue:247.0f/255.0f alpha:1]; 
      streamCell.userCheck = YES; 
     } 
     else 
     { 
      streamCell.mainView.backgroundColor = [UIColor colorWithRed:255.0f/255.0f green:255.0f/255.0f blue:255.0f/255.0f alpha:1]; 
      streamCell.userCheck = NO; 
     } 
     [cell layoutSubviews]; 
    } 
} 

감사합니다.

+0

Xcode에서 NSZombie를 사용하면 어디에서 충돌이 발생하는지 알 수 있습니다. http://stackoverflow.com/questions/5386160/how-to-enable-nszombie-in-code – freelancer

+0

충돌이 발생하지 않습니다. 그러나 빈 칸은 여전히 ​​존재합니다. 스크린 샷을 게시 할만큼 충분한 평판을 얻지 못했습니다. 여기에 대한 링크가 있습니다. http://i.stack.imgur.com/AgWfw.png –

+0

빈 셀이로드되는시기를 확인하기 위해 중단 점을로 설정하십시오. 'else' 섹션에서 흰색을 사용하고 있기 때문에 비어 있습니까? – iphondroid

답변

0

UITableViews는 메모리 할당을 줄이기 위해 표 셀을 재사용합니다. 따라서 스크롤을 시작하면 '흰색 셀'은 이전에 사용되어 수정 된 셀일 수 있습니다. willDisplayCell 메소드에서 문체 변경을 적용하기 전에 셀을 '재설정'하십시오. '재설정'은 모든 것을 셀 내의 기본값으로 다시 변경하는 사용자 지정 방법입니다.

+0

어떻게해야합니까? 그것을 무언가 또는 무언가에 도울 것인가? –

+0

cellForRowAtIndexPath 메서드에서이 값을 nil에 할당하여 문제를 강제로 적용 할 수 있습니다. 그런데 섹션이! = 0 인 경우가 있습니까? – Msencenb

+0

tableView 뒤에 이미지를 표시하는 clearColor가있는 섹션이 있습니다. 나머지는 섹션 1에 나와 있습니다. 경로와 비슷한 것. –

관련 문제