2013-11-01 3 views
0

내 스토리 보드에 테이블보기가 있습니다. viewDidLoad에서로드 된 JSON 파일에서로드 된 데이터를 사용하여 해당 테이블 뷰를 채 웁니다.UITableView가 스크롤 할 때 겹치다

내 UITableView에서 "프로토 타입 셀"을 1로 설정 했으므로 액세서리를 쉽게 선택할 수 있습니다. 내 프로토 타입 셀에는 선택한 항목의 세부 정보를 표시해야하는 새보기가있는 Seque가 있습니다. 내 세포를 작성하고 있습니다

프로그래밍이 사용 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *videoTableIdentifier = @"VideoCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:videoTableIdentifier]; 

    if (cell == nil) 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:videoTableIdentifier]; 

    UILabel * title = [[UILabel alloc] initWithFrame:CGRectMake(40,5, 240,20)]; 
    [cell addSubview:title]; 
    [title setText:[[videos objectAtIndex:indexPath.row] objectForKey:@"title"]]; 

    UILabel * detail = [[UILabel alloc] initWithFrame:CGRectMake(40,28, 100,10)]; 
    [cell addSubview:detail]; 
    [detail setText:[NSString stringWithFormat:@"Year: %@", [[videos objectAtIndex:indexPath.row] objectForKey:@"year"]]]; 

    [cell addSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:[[videos objectAtIndex:indexPath.row] objectForKey:@"image"]]]]; 

    return cell; 
} 

나는 다음과 같은 스크롤 시작 발생합니다 enter image description here

그래서 나는 솔루션을 찾고 시작하고 내가 설정 한 것으로 나타 : dequeueReusableCellWithIdentifier:videoTableIdentifier을 "nil"로 설정하십시오.

내 문제가 해결되었지만 BUT 지금 프로토 타입 셀 액세서리 및 Seque가 없어져 더 이상 다음보기로 이동할 수 없습니다.

인터넷에서이 문제에 대한 해결책을 찾을 수 없었으므로이 질문을하기로했습니다. 누군가가 도울 수 있다면 정말 좋을 것입니다.

답변

6

문제는 셀을 다시 사용할 때 새 하위 뷰를 추가한다는 것입니다. 따라서 일부 레이블이있는 셀이 있고이를 다시 사용하여 레이블을 추가하면 모든 셀이 겹쳐 보입니다.

레이블이있는 사용자 지정 UITableViewCell을 만들고 매번 레이블 값을 변경하는 것이 좋습니다.

+0

내가 생각하기에, 내가 세포를 재활용하는 것에 대해 읽었 기 때문에, 나는 그것을 고치는 법을 알 수 없었다. 텍스트 만 겹치거나, 이미지가 서브 뷰일 경우에도 마찬가지입니다. – ronnyrr

+0

이미지가 다른 이미지와 겹치고 있습니다. –

+0

if (cell == nil) 조건에서 실제로 addSubview 코드를 이동할 수 있으며 UITableViewCell을 서브 클래 싱하지 않아도 잘 작동합니다. 하지만 여전히 사용자 지정 하위 클래스를 만드는 것이 더 나은 방법이라고 생각합니다. – Lukas

0
if (!title){ 
    title = [[UILabel alloc] initWithFrame:CGRectMake(40,5, 240,20)]; 
    [cell addSubview:title]; 
} 
[title setText:[[videos objectAtIndex:indexPath.row] objectForKey:@"title"]]; 

이전 대답은 author is right. UITableViewCell의 하위 클래스를 사용하는 것이 더 나을 수 있습니다.
메모리가 공개되지 않습니다. 자동 참조 계산을 사용하고 있습니까?

관련 문제