2008-10-21 7 views
11

UITableViewCell은 init'ed 후에 UILabel을 하나의 서브 뷰로 "미리 빌드"되어 있습니다. 나는 을 정말로과 같은 레이블의 배경색을 변경하고 싶지만 색상을 변경하지 않아도 상관 없습니다. 문제의 코드는 다음과 같습니다.UITableViewCell에서 UILabel의 배경색 변경

UILabel* label = (UILabel*)[cell.contentView.subviews objectAtIndex:0]; 
label.textColor = [UIColor whiteColor]; 
label.backgroundColor = [UIColor darkGrayColor]; 
label.opaque = YES; 

답변

8

코드 스 니펫이 정상적으로 작동하지만 테이블에 셀을 추가하고 표시된 후에 수행해야합니다. initWithFrame:reuseIdentifier:에서 호출 한 경우 UILabel하위보기이 아직 생성되지 않았으므로 예외가 발생합니다.

아마도 가장 좋은 해결책은 기본 제공 경로에 의존하는 대신 자신의 UILabel을 표준에 추가하는 것입니다.

+0

글쎄, 난 처음부터 물어 이유는 : 나는 내 자신의 서브 뷰를 생성하고 싶지 않아요 (그래, 난 그 게으른). 내 코드가 배경색을 변경한다는 점에서 내 코드가 효과가 있다고합니까? 당신은 어떻게 작동하는지에 대해 더 구체적으로 설명 할 수 있습니까? – rpj

+0

나는 게으르다. 그러나 이것은 위험하다 ;-) 나는 당신의 코드를 호출 한 나의 셀의 init 메소드에 지연된 호출을 추가했다. 그것은 배경 색상 (그리고 텍스트 색상, 물론)을 변경했습니다. –

2

내장 된 셀을 추출하는 대신 셀을 할당 할 때 contentView에 자신의 레이블을 추가하십시오. 그럼 당신은 모든 값을 제어 할 수 있습니다

UILabel* label = [[[UILabel alloc] init] autorelease]; 
label.textColor = [UIColor whiteColor]; 
label.backgroundColor = [UIColor darkGrayColor]; 
label.opaque = YES; 
[cell.contentView addSubview:label]; 
+0

적어도 tableView 내에서 작동하지 않는 것 같습니다. cellForRowAtIndexPath : 어디서 작동하는지 알 수 있습니다. 어떤 힌트? – rpj

5

있는 UITableViewCell이 layoutSubviews 방법으로는 라벨의 BackgroundColors을 설정하기 때문에이 작동하지 않습니다.

내장 textLabel 또는 detailTextLabel의 색상을 변경하려면 UITableViewCell의 하위 클래스로 layoutSubviews를 재정의하십시오. 슈퍼 구현을 호출 한 다음 backgroundColor 속성을 원하는대로 변경합니다. 나는, 구루병 경로에 의존 할 즉 때문에

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.textLabel.backgroundColor = [UIColor redColor]; 
} 
0
for (UIView *views in views.subviews) 
{ 
    UILabel* temp = (UILabel*)[views.subviews objectAtIndex:0]; 
    temp.textColor = [UIColor whiteColor];   
    temp.shadowColor = [UIColor blackColor]; 
    temp.shadowOffset = CGSizeMake(0.0f, -1.0f); 
}