답변:
셀 contentView의 backgroundColor를 색상으로 설정해야합니다. 액세서리 (공개 화살표 등)를 사용하는 경우 액세서리가 흰색으로 표시되므로 사용자 정의 버전을 롤해야 할 수 있습니다.
UITableViewCellAccessoryCheckmark
예를 들어 자신의 롤링 방법에 대한 링크가 있습니까? 감사.
cell.textLabel.backgroundColor = [UIColor clearColor];
다음은이 문제를 해결하기 위해 가장 효율적인 방법입니다. willDisplayCell 대리자 메서드를 사용하십시오 (cell.textLabel.text 및 / 또는 cell.detailTextLabel.text를 사용할 때 텍스트 레이블 배경의 흰색을 처리합니다) ) :
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... }
이 대리자 메서드를 호출하면 다음과 같이 셀 색상이 테이블 뷰가 아닌 셀을 통해 제어됩니다.
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { ... }
따라서 셀 대리자 메서드의 본문 내에서 다음 코드를 추가하여 셀의 색상을 바꾸거나 함수 호출을 사용하여 테이블의 모든 셀을 동일한 색상으로 만듭니다.
if (indexPath.row % 2)
{
[cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
}
else [cell setBackgroundColor:[UIColor clearColor]];
이 솔루션은 내 환경에서 잘 작동했습니다 ...
cell.backgroundColor = UIColor.clearColor
OS 3.0은 willDisplayCell 메소드에서 셀의 배경색을 설정하기 때문에 이것은 매우 간단합니다. cellForRowAtIndexPath에서 색상을 설정하지 않아야합니다.
이것은 일반 스타일과 그룹화 스타일 모두에서 작동합니다.
암호:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor redColor];
}
추신 : 여기 willDisplayCell에 대한 문서 추출 :
"테이블보기는 셀을 사용하여 행을 그리기 직전에이 메시지를 대리자에게 전송하므로 대리자가 셀 개체를 표시하기 전에 사용자 지정할 수 있습니다.이 방법을 사용하면 대리자가 이전에 설정 한 상태 기반 속성을 재정의 할 수 있습니다. 선택 및 배경색과 같은 테이블보기. 대리자가 반환 한 후 테이블보기는 알파 및 프레임 속성 만 설정 한 다음 행이 슬라이드 아웃 또는 슬라이드 아웃 될 때에 만 애니메이션을 적용 할 때만 설정합니다. "
이 게시물 에서이 정보 를 colionel에서 찾았습니다 . 감사합니다!
지금까지 찾은 가장 좋은 방법은 셀의 배경보기를 설정하고 셀 하위보기의 명확한 배경을 설정하는 것입니다. 물론 이것은 액세서리의 유무에 관계없이 색인 스타일 만있는 테이블에서 멋지게 보입니다.
다음은 셀의 배경이 노란색으로 패닝 된 샘플입니다.
UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
backgroundView.backgroundColor = [ UIColor yellowColor ];
cell.backgroundView = backgroundView;
for ( UIView* view in cell.contentView.subviews )
{
view.backgroundColor = [ UIColor clearColor ];
}
이것을 UITableView 델리게이트 클래스 파일 (.m)에 넣으십시오.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
UIColor *color = ((indexPath.row % 2) == 0) ? [UIColor colorWithRed:255.0/255 green:255.0/255 blue:145.0/255 alpha:1] : [UIColor clearColor];
cell.backgroundColor = color;
}
Seba와 동의하며 rowForIndexPath 대리자 메소드에서 대체 행 색상을 설정하려고했지만 3.2와 4.2 사이의 결과가 일치하지 않았습니다. 다음은 저에게 효과적이었습니다.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if ((indexPath.row % 2) == 1) {
cell.backgroundColor = UIColorFromRGB(0xEDEDED);
cell.textLabel.backgroundColor = UIColorFromRGB(0xEDEDED);
cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
else
{
cell.backgroundColor = [UIColor whiteColor];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
}
다른 모든 솔루션을 시도한 후 다음 방법이 가장 우아합니다. 다음 델리게이트 방법에서 색상을 변경하십시오.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (...){
cell.backgroundColor = [UIColor blueColor];
} else {
cell.backgroundColor = [UIColor whiteColor];
}
}
vlado.grigorov는 좋은 조언을 가지고 있습니다. 가장 좋은 방법은 backgroundView를 만들고 색상을 지정하여 다른 모든 것을 clearColor로 설정하는 것입니다. 또한 그 방법이 색상을 올바르게 지우는 유일한 방법이라고 생각합니다 (샘플을 시도하지만 'yellowColor'대신 'clearColor'를 설정하십시오).
테이블 뷰 셀의 배경을 사용자 정의하면 결국 "전부 또는 전무"방식이됩니다. 내용 셀의 배경에 사용되는 색상이나 이미지를 이상하게 보이지 않게 변경하는 것은 매우 어렵습니다.
그 이유는 셀이 실제로 뷰의 너비에 걸쳐 있기 때문입니다. 둥근 모서리는 그리기 스타일의 일부이며 컨텐츠 뷰는이 영역에 있습니다.
내용 셀의 색상을 변경하면 모서리에 흰색 비트가 표시됩니다. 전체 셀의 색상을 변경하면보기 너비에 걸쳐 색상 블록이 생깁니다.
셀을 사용자 정의 할 수는 있지만 처음에 생각하는 것만 큼 쉽지는 않습니다.
N.Berendt의 답변을 확장하려면-실제 셀 데이터 객체의 일부 상태를 기반으로 셀 색상을 설정하려는 경우 일반적으로 테이블 셀에 대한 나머지 정보를 구성 할 때 cellForRowAtIndexPath 메서드를 사용하면 willDisplayCell 메서드를 재정 의하여 내용보기 배경색에서 셀 배경색을 설정 하여이 작업을 수행 할 수 있습니다. 공개 버튼 배경 등의 문제가 발생하지 않지만 cellForRowAtIndexPath 메서드에서 색상을 제어 할 수 있습니다 다른 모든 셀 커스터마이제이션을 수행하는 곳.
따라서 :이 방법을 테이블 뷰 대리자에 추가하면 :
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = cell.contentView.backgroundColor;
}
그런 다음 cellForRowAtIndexPath 메소드에서 다음을 수행 할 수 있습니다.
if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
cell.contentView.backgroundColor = [UIColor blueColor];
}
이렇게하면 willDisplayCell 메소드에서 데이터 오브젝트를 다시 검색하지 않아도되며 테이블 셀의 조정 / 사용자 정의를 수행하는 두 곳의 위치도 저장됩니다. 모든 사용자 정의는 cellForRowAtIndexPath 메소드에서 수행 할 수 있습니다.
Photoshop 또는 gimp에서 배경으로 사용할 이미지를 만들어 myimage로 이름을 지정하십시오. 그런 다음이 메소드를 tableViewController 클래스에 추가하십시오.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
UIImage *cellImage = [UIImage imageNamed:@"myimage.png"];//myimage is a 20x50 px with gradient color created with gimp
UIImageView *cellView = [[UIImageView alloc] initWithImage:cellImage];
cellView.contentMode = UIContentViewModeScaleToFill;
cell.backgroundView = cellView;
//set the background label to clear
cell.titleLabel.backgroundColor= [UIColor clearColor];
}
속성 관리자에서 UITableView를 custom으로 설정 한 경우에도 작동합니다.
내 해결책은 cellForRowAtIndexPath 이벤트에 다음 코드를 추가하는 것입니다.
UIView *solidColor = [cell viewWithTag:100];
if (!solidColor) {
solidColor = [[UIView alloc] initWithFrame:cell.bounds];
solidColor.tag = 100; //Big tag to access the view afterwards
[cell addSubview:solidColor];
[cell sendSubviewToBack:solidColor];
[solidColor release];
}
solidColor.backgroundColor = [UIColor colorWithRed:254.0/255.0
green:233.0/255.0
blue:233.0/255.0
alpha:1.0];
공개 버튼으로도 모든 상황에서 작동하며 cellWillShow 이벤트보다 cellForRowAtIndexPath의 셀 색상 상태에서 논리가 더 잘 작동합니다.