2013-04-11 5 views
3

UITableViewCell의 서브 클래스를 만들고 어떤 뷰 (예 : UILabel)가 있다고 가정 해 보겠습니다.UITableViewCell 뷰 내에서 뷰 애니메이션 및 변경하기

이 렌더링되었습니다. 이제보기를 변경/애니메이션하고 싶습니다. 그래서 cellForRowAtIndexPath

|      |   |      | 
|-----------------------|   |-----------------------| 
|  label alpha=1.0 | animate |  label alpha=0.5 | 
|-----------------------| ===> |-----------------------| 
|  label alpha=1.0 |   |  label alpha=0.5 | 
|-----------------------|   |-----------------------| 
|      |   |      | 

, willDisplayCell, didEndDisplayingCell 내 생각은, 지금은 좋은 옵션이 아니다.

UITableViewCell 하위 클래스의 메소드 animateTest을 작성하여 라벨의 스타일을 변경합니다. 색상을 지정하거나 애니메이션을 수행합니다.

이제 테이블을 렌더링하는 뷰 컨트롤러에서 테이블 뷰 서브 뷰에서 빠른 enumaration을 수행하려고했습니다. 열거 형 덕분에 하위 클래스 인 UITableViewCell 인스턴스를 모두 가져 왔고 performSelector을 사용하여 animateTest 메서드를 사용했습니다. 하지만 아무 것도 변경되지 않습니다. 경우에도 [tableview reloadData].

표가 렌더링 된 후에 표 셀에서 어떤 것을 애니메이션으로 만들 수 있습니까? ([UIView animateWithDuration.........] 사용)?

미리 감사드립니다.

+1

정확하게 질문해야합니다. 셀에 액세스하는 방법을 묻고 있습니까? * animateWithDuration *을 호출 할 위치? 귀하의 질문에 정말 모르겠어요. – rdurand

+0

죄송합니다, 성공적으로 (열거 덕분에) 셀을 성공적으로 액세스 할 수 있지만 아무것도 변경 ... - 그래서 두 번째 : animateWithDuration 호출 할 위치? – Heps

+0

그것은 애니메이션을 트리거하는 것에 따라 다릅니다. 버튼 진부한가, 세포 진영인가 등등? – rdurand

답변

2

셀 초기화가 잘못되어 실제로 아무 일도 일어나지 않았습니다.

NSString *cellIdentifier = [NSString stringWithFormat:@"Cell%d", [indexPath section]]; 

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
NSArray *topLevelObjects; 
topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil]; 

    for(id currentObject in topLevelObjects) 
    { 
     if([currentObject isKindOfClass:[CustomCell class]]) 
     { 
      cell = (CustomCell *)currentObject; 
      break; 
     } 
    } 

가 지금은 그런 식의 셀 초기화 :

static NSString *reuseIdentifier = @"Cell"; 

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 

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

을 그리고 모든 사용하여 제대로 작동 :

CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:3]]; 
[UIView animateWithDuration:2 animations:^{ 
    cell.element.alpha = 0; 
}]; 

하면

나는 이전에 다음과 같은 방법으로 셀을 초기화 누구나 첫 번째 방법으로 무엇이 잘못되었는지 간단하게 설명 할 수 있습니다. 감사하게 생각합니다. 이전 셀이 (애니메이션이 적용된 상태에서) 버리고 셀이 다시 생성 되었기 때문에 셀이 해당 초기화로 어떤 방식으로 재설정 된 것으로 의심됩니다. 변경 사항이 표시되지 않습니다.

일부 웹 사이트에서 스 니펫을 복사 한 적이 있으므로 사용하는 데 익숙해졌지만 분명히 좋은 구현은 아닙니다.