2011-03-06 8 views

답변

1

예, 약간의 작업이 필요하지만 (불행히도이를 이해하려면 Three20에 대한 경험이 필요합니다).

첫째, 배경 : 당신이 TTTableMessageItem가, Three20 나중에 유형 TTTableMessageItemCell의 테이블 셀을 생성합니다 생성

. 합니다 (Three20UI 프로젝트에 -[TTTableMessageDataSource tableView:cellClassForObject:]의 코드를 참조하십시오.)

당신이 (같은 프로젝트) 클래스 TTTableMessageItemCell의 소스 코드를 보면 그래서, 당신이 titleLabel라는 속성을 가지고 있음을 볼 수 있습니다. 해당 레이블을 만드는 - (UILabel*)titleLabel 함수에서 _titleLabel.textColor = [UIColor blackColor]을 설정합니다.

이렇게하면 제목 색을 변경하는 방법을 알아내는 데 필요한 정보가 제공됩니다. TTTableMessageItemCell 인스턴스의 titleLabel.textColor 속성을 변경하는 방법을 찾아야합니다. 당신이 취할 수있는 몇 가지 접근법이 있습니다.

쉬운 방법이지만 틀림없이 깨끗하지는 않지만 (실제로 그렇게 나쁘지는 않음) 자신의 테이블 대리자 클래스 (하위 클래스 TTTableViewVarHeightDelegate)를 만든 다음 하위 클래스에 -[tableView:willDisplayCell:forRowAtIndexPath:]을 구현하는 것입니다. 이 함수에서 titleLabel의 textColor를 변경합니다. 이 방법을 촬영하려면 :

  • 자신의 테이블 뷰 위임 클래스를 생성 - TTTableViewVarHeightDelegate의 서브 클래스를.

    @interface MyDelegate : TTTableViewVarHeightDelegate 
    @end 
    

    그리고 여기 MyDelegate.m입니다 : 예를 들어, 다음 MyDelegate.h 당신의 테이블 뷰 컨트롤러에서

    @implementation MyDelegate 
    
    - (void)tableView:(UITableView *)tableView 
          willDisplayCell:(UITableViewCell *)cell 
         forRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        if ([cell isKindOfClass:[TTTableMessageItemCell class]]) { 
         TTTableMessageItemCell* messageCell = (TTTableMessageItemCell*)cell; 
         messageCell.titleLabel.textColor = [UIColor blueColor]; 
        } 
    } 
    
    @end 
    
  • (TTTableViewController의 하위 클래스), createDelegate를 오버라이드 (override) :

    - (id <UITableViewDelegate>) createDelegate { 
        return [[[MyDelegate alloc] initWithController:self] autorelease]; 
    } 
    

다른 접근법, 즉 perhap 좀 더 청결하지만 더 많은 작업이 필요하다면, 하위 클래스 인 TTTableMessageItemTTTableMessageItemCell; TTTableMessageItemCell 하위 클래스에서 제목 색상을 변경합니다 (예 : -[titleLabel] 무시). 서브 클래스 TTListDataSource 또는 TTSectionedDataSource; 하위 클래스에서 -[tableView:cellClassForObject:]을 재정의하십시오. TTTableMessageItem 하위 클래스의 인스턴스가 전달되면 TTTableMessageItemCell 하위 클래스의 인스턴스를 반환합니다. 아휴! 이 코드를 사용하면 코드 재사용이 가능합니다. 테이블은 TTTableMessageItem 하위 클래스의 인스턴스를 반환하고 셀 색상 지식을 테이블 뷰에 배치하기 때문에 약간의 해킹 인 위의 기법 대신 적절하게 색상이 지정된 제목을 얻을 수 있습니다. 대의원은 실제로 그 곳이 아닙니다. 그러나 볼 수 있듯이 색상을 변경하는 것과 같은 단순한 작업을 위해서는 뛰어 넘기가 쉽습니다.

+0

먼저, 설명해 주셔서 감사합니다. 그것은 매우 유용합니다. 나는 TTTableMessageItemCell을 사용하여 문제를 해결했다. 하지만 TTTableMessageItemCell 사용할 때 모든 행을 선택할 수 없습니다. didSelectObject 메서드는 셀을 클릭 할 때 작동하지 않습니다. 전에 TTTableMessageItem에 대한 URL이 설정되었습니다.TTTableMessageItemCell은 TTTableMessageItem과 같은 URL을 지원합니까? 고맙습니다. –

+0

나는 당신의 질문을 이해하지 못합니다. URL과 didSelectObject는 잘 작동해야합니다. 생성 한 TTTableMessageItem에 URL을 설정하기 만하면 TTTableMessageItemCell에서 해당 URL을 사용하고 클릭 할 수있게해야합니다. –

+0

문제가 해결되었습니다. 설명해 주셔서 감사합니다. –

관련 문제