iOS - UITableViewCell 改變編輯狀態圖片

來源:互聯網
上載者:User

UITableViewCell 是編輯狀態時 會出現多選按鈕,最近項目有需求這裡要改成自己的圖片和去掉一下點擊效果,總結一下: 內建的效果圖是這樣的:




我們需要的效果是換掉 藍色的選中圖片和點擊的背景顏色 效果大概是這樣:



我們一步步的來:


首先把藍色的選中圖片換成自己的:方法就是先遍曆cell的contentview得到這個圖片然後替換,在自訂的cell裡面找到- (void)setSelected:(BOOL)selected animated:(BOOL)animated方法 具體代碼: (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if (!self.editing) return;
[super setSelected:selected animated:animated];
if (self.isEditing && self.isSelected) {

  self.contentView.backgroundColor     = [UIColor clearColor];  //這裡自訂了cell 就改變自訂控制項的顏色  self.textLabel.backgroundColor       = [UIColor clearColor];  UIControl *control = [self.subviews lastObject];  UIImageView * imgView = [[control subviews] objectAtIndex:0];  imgView.image = [UIImage imageNamed:@"要替換的圖片"];
}
} 加了這代碼後效果是這樣的:


可以看到圖是已經換了,但是點擊的效果沒有去掉,下一步去掉點擊的效果,我們可以根據cell的selectedBackgroundView屬性來改變,具體代碼:


(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
{

   self.contentView.backgroundColor = [UIColor clearColor];   UIView *backGroundView = [[UIView alloc]init];   backGroundView.backgroundColor = [UIColor clearColor];   self.selectedBackgroundView = backGroundView;   //以下自訂控制項
}
return self;
} 效果如下:


這樣基本已經好了,但是有的時候狂點系統的藍色表徵圖有時也會出來,發現是高亮狀態的問題,所有在cell裡面還要實現這個方法:

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{

 //    [super setHighlighted:highlighted animated:animated]; //    if (self.isEditing && self.isHighlighted ) { //        UIControl *control = [self.subviews lastObject]; //        UIImageView * imgView = [[control subviews] objectAtIndex:0]; //        imgView.image = [UIImage imageNamed:@"DC_agree_selected"]; //    } return;

} 裡面把高亮狀態的圖片換成自己的就可以,我試了直接return也可以.


後續: 要實現編輯前UITableView要先進入編輯狀態:

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {     return YES; } - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {     return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {     if (editingStyle == (UITableViewCellEditingStyleDelete|UITableViewCellEditingStyleInsert)) {         [self.dataSoure removeObject:[self.dataSoure objectAtIndex:indexPath.row]];         //animation後面有好幾種刪除的方法         [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];     } }
如何處理選中和未選中的資料呢。用系統內建的方法就可以,首先定義一個可變的數組@property (nonatomic,strong) NSMutableArray* selectArray;,然後在tableView協議方法裡面找到didSelectRowAtIndexPath和didDeselectRowAtIndexPath方法,具體實現:
 #pragma mark - UITableViewDelegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {     [self.selectArray addObject:[self.dataSoure objectAtIndex:indexPath.row]]; } - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {     [self.selectArray removeObject:[self.dataSoure objectAtIndex:indexPath.row]]; }<br />
一起學習進步 文/棟飛
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.