2012-08-12 7 views
0

저는 UITableView를 가지고 있으며 각 셀에 일부 뷰가 포함되어 있으며 뷰 중 하나는 UIImageView입니다. cellForRow 메서드에서 이미지로 UIImageView를로드하고 있지만 때로는 UIImageView가 검정색 화면을 표시하는 경우가 있습니다.UIImageView가 일관성없이 검정색이 됨

두 가지 이유가있을 수 있다고 생각했는데 - 손상된 UIImage 또는 메모리 문제 일 수 있습니다.

UIImage는 손상되지 않습니다 (UIImage는 항상 동일한 것입니다). 그리고 수동으로 손상된 이미지를 넣을 때 어떤 동작인지 확인했습니다. -> 흰색으로 바뀝니다! 검은 색이 아님 ...

메모리 경고가 있는지 확인하고, ViewDidUnload를 실행합니다. -> 아무것도 표시되지 않습니다. 시뮬레이터에서의 시뮬레이트 된 메모리 경고조차도, 아무 것도 할 수 없습니다.

다른 사람이 무슨 일이 일어나고 있는지 실마리가 있습니까?

감사합니다.


여기 내 cellForRow 메소드입니다. 기본적으로 UIWebView 및 UIImageView가 맨 위에있는 셀 목록이며 테이블이 스크롤되면 웹 뷰를 숨기고 이미지 뷰를 표시하며 반대의 경우도 마찬가지입니다. 어쩌면 내 문제와 관련이 있을지 모르지만 이미지가 동일하고 uiimagaview가 출시되지 않기 때문에 의심 스럽습니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    ImMailMessage *message = [_messages objectAtIndex:indexPath.row]; 

ImFullMessageTableViewCell *cell = (ImFullMessageTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"ImFullMessageTableViewCell"]; 

if (cell == nil) 
{ 
    cell = [[[NSBundle mainBundle] loadNibNamed:@"ImFullMessageTableViewCell" owner:self options:nil] objectAtIndex:0]; 
    cell.delegate = self; 

    //add gestures 
    UIPinchGestureRecognizer *pinchGesture = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(cellPinched:)] autorelease]; 
    [cell addGestureRecognizer:pinchGesture]; 
    pinchGesture.delegate = self; 

    UIPanGestureRecognizer *panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(cellPanned:)] autorelease]; 
    panGesture.minimumNumberOfTouches = 2; 
    [cell addGestureRecognizer:panGesture]; 
    panGesture.delegate = self; 

} 


cell.threadState = _state; 
cell.mailMessage = message; 


UIImage *image = [self imageForMailMessage:message]; 
if (!image) 
{ 
    // if no image, put the webview and reload it. 
    cell.webView.mailMessage = message;  
    cell.webViewImageView.hidden = YES; 
    cell.webViewImageView.image = nil; 
    [cell.webView reloadMailMessage]; 

} 
else // image exists! 
{ 
    cell.webViewImageView.image = image; 

    // replace the web view with the recived image. 
    [cell replaceWebViewWithImageView]; 
} 


return cell; 
} 
+1

cellForRow 코드를 게시 할 수 있습니까? – pdesantis

+0

귀하의 질문에보다 잘 부응하기 위해 귀하의 cellForRowAtIndexPath 코드가 필요합니다 : – Cezar

+0

안녕하세요, cellForRow 메서드를 추가했습니다 ... –

답변

1

"cellForRow"에서 먼저 오래된 셀을 재활용하려고 시도한 다음 사용 가능한 셀이없는 경우 새 셀을 만듭니다. 당신은 어떻게 든 UIImageView에 액세스 할 수 있습니다. (또는 셀이 제공하는 것을 사용하고 있습니까?)

가장 먼저 할 일은 cellForRow에서 이미지를 설정하지 않아도 UIImageView를 찾을 수 있습니다. 당신이 녹색 컬러 사각형의 무리를 볼 경우

이미지가,

imageView.backgroundColor은 [UIColor이 greenColor] = 그이 후 녹색 말할 배경색 "을 설정하는 것이()을 기록하거나 주장 , 다음 단계 (녹색 배경을 제거한 후!)로 진행하여 이미지를 설정할 수 있습니다. 그러나 이미지가 설정 될 때마다 LOG를 설정하십시오. 설정하기 전에 이미지를 기록하면 100 % 확신 할 수 있습니다. 사실 당신은 유효한 이미지.

여기까지 가면 녹색 이미지가 표시되지만 이미지는 계속 표시되지만 여전히 작동하지 않는 경우 댓글을 추가하면 다시 확인합니다.

편집 : 계속해서 이미지를 쓰지 마십시오. 이제 이미지 뷰의 배경을 그려야합니다.

가 대리자 메서드를 추가합니다 "- (무효)있는 tableView : (jQuery과 *)있는 tableView willDisplayCell : (있는 UITableViewCell *) 세포 forRowAtIndexPath : (NSIndexPath *) indexPath "가 각 셀에 대한 로그를 넣어

, 그것의 인덱스, imageView, imageView.backgroundColor, 그리고 imageView.image를 로깅해야한다. 배경색이 녹색이 ​​아니거나 약간의 이미지가 있다는 것을 알게 될 것입니다.

+0

안녕하세요, 먼저 cellForRow 메서드를 추가했습니다. 이것은 사용자 정의 셀이므로 자신의 UIImageView가 있습니다. 녹색 직사각형과 로그를 보았지만 그래도 때때로 검은 색으로 보입니다. 왜 이상하지 않습니까? 매우 이상한 ... –

+0

이미지를 설정하지 않아도 괜찮아요, 때로는 검은 색입니다. 글쎄, 그건 당신의 이미지와 아무런 관련이 없다는 것을 의미합니다. 지금 제 대답을 편집 할 것입니다. 따라서 셀을 만들면 새로운 UIImageCView를 추가하고 재활용 된 셀을 가져 오면 contentView 셀에서 imageView를 가져옵니다. –

+0

좋아, 문제가 발견! 문제는 이미지 때문이었습니다. 나는 밑에 webview를 캡쳐했지만, 때때로 webview가 숨겨 졌을 때 그것을했다. 그것이 문제이다! 실제로 제가 한 테스트를 통해 저를 해결책으로 인도했습니다. 감사! –

관련 문제