修改UITableViewCell刪除按鈕樣式

一、iOS 11之前的處理方法

我們知道UITableViewCell默認(rèn)的刪除按鈕樣式為紅色背景、白色字體;怎么樣來(lái)修改按鈕的樣式呢?網(wǎng)上查詢大多的做法是通過(guò)遍歷cell的subViews獲取這個(gè)刪除按鈕然后修改樣式;話不多說(shuō)直接上代碼:

- (void)layoutSubviews
{
    [super layoutSubviews];
    for (UIView *subView in self.subviews)
    {
        if (X(subView)  >= WIDTH(self))
        {
            for (UIView *childView in subView.subviews)
            {
                if ([childView isKindOfClass:[UIButton class]])
                {
                    UIButton *delBtn = (UIButton *)childView;
                    [delBtn setBackgroundColor:[UIColor orangeColor]];
                    [delBtn setTitleColor:[UIColor purpleColor] forState:(UIControlStateNormal)];
                    break;
                }
            }
        }
    }
}

在嘗試獲取這個(gè)刪除按鈕的時(shí)候試了不少方法,按網(wǎng)上說(shuō)的cellforrow、cellwilldisplay等方法里都沒獲取到;后來(lái)經(jīng)嘗試發(fā)現(xiàn)在cell的layoutsubviews方法里可以讀取到(自定義cell在正常狀態(tài)下有三個(gè)子view,contentView、和兩個(gè)分割線view,編輯時(shí)會(huì)出現(xiàn)第四個(gè)view);因?yàn)閏ontentView里面也可能會(huì)有button所以加了個(gè)位置判斷,如果view的左側(cè)超出屏幕右側(cè)說(shuō)明是編輯view(刪除按鈕默認(rèn)是在contentView的右側(cè));如果想完全自定義右側(cè)的刪除按鈕可以給這個(gè)button添加自定義視圖,大家可以自己嘗試一下;
然后刪除按鈕的標(biāo)題修改系統(tǒng)提供了一個(gè)代理方法:

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"點(diǎn)擊刪除";
}

修改后效果如下圖:

效果圖

Demo地址

二、iOS 11之后的解決方法

0、在iOS 11中系統(tǒng)修改了編輯按鈕的實(shí)現(xiàn)方式,新加入了一個(gè)UISwipeActionPullView類(沒有對(duì)外暴露),而且這個(gè)控件不是添加在cell里了,是tableview的subView。所以之前通過(guò)取cell的subView來(lái)修改樣式的方法行不通了。
1、iOS 11系統(tǒng)修改了編輯按鈕的實(shí)現(xiàn)方式,通過(guò)下面的兩個(gè)代理方法用戶可以配置多個(gè)編輯按鈕并自定部分樣式(可設(shè)置背景色,背景圖片等)。
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
2、雖然通過(guò)系統(tǒng)的方法可以修改編輯按鈕的樣式,但系統(tǒng)提供的還不夠,不能完全自定義樣式。所以可以按照以前的思路取出這個(gè)UISwipeActionPullView然后拿到編輯按鈕修改樣式。因?yàn)檫@個(gè)控件是tableview的子控件所以我們可以自定義tableView類,然后通過(guò)layoutsubView方法來(lái)拿到這個(gè)控件,并修改它的樣式。
- (void)layoutSubviews
{
    [super layoutSubviews];
    for (UIView *subView in self.subviews)
    {
        if ([subView isKindOfClass:NSClassFromString(@"UISwipeActionPullView")])
        {
            subView.backgroundColor = [UIColor orangeColor];
            for (UIView *view in subView.subviews)
            {
                if ([view isKindOfClass:[UIButton class]])
                {
                    UIButton *btn = (UIButton *)view;
                    [btn setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
                    [btn setBackgroundColor:[UIColor orangeColor]];
                }
            }
        }
    }
}
3、如果需要多個(gè)編輯按鈕,在iOS11之前只能借助一些第三方的實(shí)現(xiàn)方式,其中SWTableViewCell是比較常用的一個(gè)框架。(未完待續(xù))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,172評(píng)論 4 61
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,144評(píng)論 22 665
  • 感恩父母的養(yǎng)育,感恩師長(zhǎng)傳授智慧,感恩學(xué)長(zhǎng)的幫助,感恩生命中充滿了正能量,感恩女兒懂事,感恩父母安康,感恩按計(jì)劃播...
    妙愛閱讀 91評(píng)論 0 0
  • 我已經(jīng)大二了,仔細(xì)想來(lái),幾乎是單身了二十一年了。靠著這二十一年來(lái)吃過(guò)的狗糧堅(jiān)強(qiáng)的活到現(xiàn)在。 崔辣雞是我目前遇到過(guò)的...
    江衍閱讀 375評(píng)論 0 0

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