iOS11下自定義左滑刪除的處理.md

示例圖.jpg

在iOS11之前,如果需要自定義左滑刪除的顯示樣式,可以通過遍歷cell的子視圖,找到左滑顯示出來的視圖,直接更改該視圖即可

重寫自定義CelllayoutSubviews方法

// TableViewCell.m

- (void)layoutSubviews {
    [super layoutSubviews];
    for (UIView *subView in self.subviews) {
        if ([subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) {
            subView.backgroundColor = [UIColor colorWithHEXString:@"#F2F2F4"];
            
            for (UIView *btnView in subView.subviews) {
                if ([btnView isKindOfClass:NSClassFromString(@"_UITableViewCellActionButton")]) {
                    UIButton *btn = (UIButton *)btnView;
                    btn.bounds = CGRectMake(0, 0, 50, 50);
                    btn.backgroundColor = [UIColor whiteColor];
                    btn.layer.cornerRadius = 25;
                    [btn setBackgroundImage:[UIImage imageNamed:@"collection_item_delete"] forState:UIControlStateNormal];
                    
                    // 移除標題
                    for (UIView *view in btn.subviews) {
                        if ([view isKindOfClass:NSClassFromString(@"UIButtonLabel")]) {
                            [view removeFromSuperview];
                            break;
                        }
                    }
                }
            }
        }
    }
}

但是在iOS11之后左滑刪除的視圖層級發(fā)生了變化。該視圖不再屬于Cell,而是屬于tableView。
所以再更改該樣式時需要在tableView上面來進行更改。

視圖層級改變?yōu)?UITableView -> UISwipeActionPullView

所以更改該界面的方法如下


// ViewController.m

- (void)configSwipeButton
{
    // iOS 11層級: UITableView -> UISwipeActionPullView
    for (UIView *subview in self.tableView.subviews)
    {
        if ([subview isKindOfClass:NSClassFromString(@"UISwipeActionPullView")])
        {
            subview.backgroundColor = [UIColor colorWithHEXString:@"F2F2F4"];
            UIButton *deleteBtn = subview.subviews.firstObject;
            [deleteBtn setImage:[UIImage imageNamed:@"collection_item_delete"] forState:UIControlStateNormal];
            deleteBtn.backgroundColor = [UIColor colorWithHEXString:@"F2F2F4"];
            [deleteBtn setTitle:@"" forState:UIControlStateNormal];
            
            CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
            UIGraphicsBeginImageContext(rect.size);
            CGContextRef context = UIGraphicsGetCurrentContext();
            CGContextSetFillColorWithColor(context, [[UIColor color5] CGColor]);
            CGContextFillRect(context, rect);
            UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            
            [deleteBtn setBackgroundImage:theImage forState:UIControlStateHighlighted];
            [deleteBtn setBackgroundImage:theImage forState:UIControlStateNormal];
        }
    }
}
注意點1

iOS11之前,對視圖的調(diào)整是在自定義的Cell中的調(diào)整
而iOS11之后是在tableView所在的ViewController中來調(diào)整

注意點2

上述方法中通過代碼畫出來一張和背景色相同的圖片,作為按鈕的高亮狀態(tài)的背景圖。

如果不進行這步操作,左滑出來之后樣式是正常的,但是當(dāng)點擊時按鈕背景色會變?yōu)槟J的紅色。所以需要設(shè)置其高亮狀態(tài)的背景圖片。

注意點3

UISwipeActionPullView該視圖只有在tableView處于編輯模式的時候才會出現(xiàn)。所以上面這個方法的調(diào)用時機應(yīng)該是在tableView處于左滑狀態(tài)時,即編輯模式下。所以需要在tableView的進入編輯模式的代理方法中進行如下監(jiān)聽處理

// ViewController.m

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    self.editingIndexPath = indexPath;
    [self.view setNeedsLayout];
}

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    self.editingIndexPath = nil;
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    if (self.editingIndexPath && ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0)) {
        [self configSwipeButton];
    }
}

定義一個屬性用于判斷當(dāng)前是否處理編輯模式。用BOOL即可

當(dāng)tableView進入編輯模式時,將該屬性設(shè)置為YES,同時調(diào)用setNeedsLayout來進行界面重繪。

界面重新繪制會進入到viewDidLayoutSubviews方法中,在該方法內(nèi)檢測是否處于編輯狀態(tài)并且系統(tǒng)版本高于iOS11。

符合判斷后 重新調(diào)整左滑后的樣式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫在開頭:本文所介紹的方法使用的是iOS8-10中的API,不過同樣支持在iOS11上運行。<最近更新時間:201...
    pika11閱讀 31,939評論 85 150
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,657評論 4 61
  • “果然是創(chuàng)業(yè)少女”打開微信一個好友評論了我剛發(fā)的狀態(tài),嗯,我在朋友圈賣甘蔗。 把這念頭告訴我媽的時候,...
    莫小粒閱讀 559評論 2 2
  • 何為最幸福?跛足者答:跑。盲人答:看見媽媽。癱瘓者答:站起來。聾人答:聽見流行歌曲。哮喘病人答:別咳嗽。腎炎患者答...
    xcy無名閱讀 263評論 0 2
  • 月光灑在卑微的樟樹上 遠方一位老奶奶 舉步艱難漫過蒼涼的夜 一輛黑色轎車奔馳而過 嚇壞了墜入愛河的小狗 燈光 星...
    向陽貍閱讀 214評論 3 0

友情鏈接更多精彩內(nèi)容