사용자 정의 UITableViewCell 선택 스타일?
를 UITableViewCell
클릭하면 셀을 클릭하면 배경 부분 (내 배경 이미지가 덮지 않는 영역)이 파란색으로 바뀝니다. 또한 UILabel
클릭하면 셀의 모든 s가 흰색으로 바뀝니다.
그러나 내가 원하지 않는 것은 클릭했을 때 파란색 배경이지만 클릭 하면 셀 selectionstylenone
의 UILabel
s에 대해 강조 표시된 색상이 손실됩니다 .
그렇다면 셀을 클릭 할 때 파란색 배경을 제거하고 UILabel
s 의 강조 표시된 색상을 유지하는 방법이 있습니까?
다음과 같이 할 수 있습니다. 표 셀의 선택 스타일을 UITableViewCellSelectionStyleNone
. 파란색 배경 강조 표시가 제거됩니다. 그런 다음 기본 UITableViewCell 클래스를 사용하는 대신 텍스트 레이블 강조 표시가 원하는 방식으로 작동하도록하려면의 하위 클래스를 만들고 강조 표시된 상태에 따라 원하는대로 레이블 색상을 설정하는 자체 구현 UITableViewCell
으로의 기본 구현을 재정의합니다. setHighlighted:animated
.
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
if (highlighted) {
self.textLabel.textColor = [UIColor whiteColor];
} else {
self.textLabel.textColor = [UIColor blackColor];
}
}
iOS7 이전에 작업하는 경우 셀 선택 스타일을 없음으로 설정하십시오.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
그렇지 않으면 그대로 두십시오. UITableViewCellSelectionStyleDefault
그때:
UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView = selectedView;
이 코드는 제대로 작동합니다.
선택 스타일을 없음으로 설정 한 후 다음 대리자 메서드를 사용할 수 있습니다.
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
여기에 다음과 같이 코드를 구현하십시오.
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
[cell.lbls setTextColor:[UIColor whiteColor]];
return indexPath;
}
cellForRowAtIndexPath에서 다음 코드를 사용하십시오.
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels
이것이 당신을 위해 일하기를 바랍니다.
코딩 즐기기 :)
이 작업을 수행하려면 선택 스타일을로 설정 UITableViewCellSelectionStyleNone
한 다음 setSelected:animated:
원하는 결과를 얻기 위해 메서드 를 재정의해야합니다 . 파란색 (또는 회색) 선택을 볼 때 iOS의 자동 선택 메커니즘이 수행하는 것과 동일한 작업을 수행합니다.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if (selected) {
self.textLabel.textColor = [UIColor whiteColor];
} else {
self.textLabel.textColor = [UIColor blackColor];
}
}
UITableViewCell 배경을 변경하는 등 다른 방법으로이를 사용자 지정할 수도 있습니다.
의 하위 클래스에서 다음 함수를 재정의합니다 UITableViewCell
.
override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }
표준 선택 스타일 동작을 일치시키기 위해 setHighlighted:animated:
및 setSelected:animated:
. 중복 코드를 피하기 위해 해당 코드를 공유 메서드로 옮기고 싶을 것입니다.
override func setHighlighted(highlighted: Bool, animated: Bool) {
setAsSelectedOrHighlighted(highlighted, animated: animated)
super.setHighlighted(highlighted, animated: animated)
}
override func setSelected(selected: Bool, animated: Bool) {
setAsSelectedOrHighlighted(selected, animated: animated)
super.setSelected(selected, animated: animated)
}
func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) {
let action = {
// Set animatable properties
}
if animated {
UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil)
}
else {
action()
}
}
사용자 지정 셀에서 awakeFromNib 및 setSelected의 기본 구현을 재정의합니다.
- (void)awakeFromNib {
// Initialization code
UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.bounds];
imageView.image = [UIImage imageNamed:@"cell_selected_img"];
self.selectedBackgroundView = imageView;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
if (selected) {
self.lblCustomText.textColor = [UIColor whiteColor];
} else {
self.lblCustomText.textColor = [UIColor blackColor];
}
}
Also make sure that the selection style is NOT set to None.
The only way I could get it working was by:
- (void)awakeFromNib {
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:(55.0/255.0) green:(163.0/255.0) blue:(237.0/255.0) alpha:1.0];
bgColorView.layer.masksToBounds = YES;
self.selectedBackgroundView = bgColorView;
}
Also you can use contentView.alpha. Here is the example.
First, set selection style for your cell:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Next, in custom cell class override this method with animation example:
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
if (highlighted) {
[UIView animateWithDuration:0.15f animations:^{
self.contentView.alpha = 0.5f;
}];
} else {
[UIView animateWithDuration:0.35f animations:^{
self.contentView.alpha = 1.f;
}];
}
}
참고URL : https://stackoverflow.com/questions/11920156/custom-uitableviewcell-selection-style
'Programing' 카테고리의 다른 글
구분 기호에 따라 문자열을 문자열 배열로 분할 (0) | 2020.10.11 |
---|---|
printf에 색상 사용 (0) | 2020.10.11 |
ConstraintLayout을 ScrollView 안에 넣을 수 있습니까? (0) | 2020.10.11 |
Mac OS X 10.9에서 pip를 사용하여 Python 이미지 라이브러리를 설치하는 중 오류 발생 (0) | 2020.10.11 |
URL 단축 웹 사이트와 같은 PHP 짧은 해시 (0) | 2020.10.11 |