Native定制TableViewCell的刪除視圖

看了很多自定義的第三方例子,都有一個(gè)通病,就是自定義出來的視圖會(huì)跟隨Cell的ContentView劃動(dòng),而Native的是沒有這個(gè)情況的(總是屏幕右對(duì)齊),但TableView并沒有暴露自定義這個(gè)視圖的方法,怎么辦呢,自己動(dòng)手豐衣足食.

首先裝一個(gè)LLDB輔助工具Chisel,雖然不是必需,但有這個(gè)東西在調(diào)試時(shí)會(huì)方便一些,建議裝上( https://github.com/facebook/chisel ),接著就是在項(xiàng)目中建個(gè)能正常顯示刪除按鈕的TableView,大概就是這樣

@interface RootViewController()<UITableViewDelegate, UITableViewDataSource>

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    
    UITableView *tv = [[UITableView alloc] init];
    tv.delegate = self;
    tv.dataSource = self;
    tv.frame = self.view.bounds;
    [self.view addSubview:tv];
}

#pragma mark TableView代理
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 3;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 這里就簡單返回個(gè)CELL
    UITableViewCell *cell = [[UITableViewCell alloc] init];
    cell.textLabel.text = @"sma111case";
    cell.contentView.backgroundColor = [UIColor greenColor];
    return cell;
}

// 允許劃動(dòng)刪除
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

// 刪除按鈕的文字(其實(shí)就是間接返回刪除按鈕的長度,自定義視圖時(shí)可調(diào)節(jié)該文本的長度控制View的寬度)
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"sma11case";
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    // 在這里下個(gè)斷點(diǎn),因?yàn)檫@個(gè)時(shí)候已經(jīng)生成刪除按鈕視圖,順手拿到點(diǎn)擊的Cell
    sleep(1);
}
@end

在Sleep的地方下個(gè)斷,然后觸發(fā)刪除事件,此時(shí)應(yīng)該停在Sleep那行代碼,在LLDB中CMD+K清掉日志,然后使用 pviews cell 拿到CELL的視圖樹,大概是這樣子

<UITableViewCell: 0x7fa858667c80; frame = (0 88; 375 44); text = 'sma111case'; autoresize = W; gestureRecognizers = <NSArray: 0x7fa858464280>; layer = <CALayer: 0x7fa858668050>>
   | <UITableViewCellDeleteConfirmationView: 0x7fa858461ad0; frame = (375.5 0; 117 44); clipsToBounds = YES; autoresize = H; layer = <CALayer: 0x7fa85842df20>>
   |    | <_UITableViewCellActionButton: 0x7fa858683fa0; frame = (0 0; 117 44); opaque = NO; autoresize = H; layer = <CALayer: 0x7fa8586844e0>>
   |    |    | <UIButtonLabel: 0x7fa858684f80; frame = (15 11; 87 21.5); text = 'sma11case'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fa858685420>>
   | <UITableViewCellContentView: 0x7fa858668070; frame = (0 0; 375 43.5); gestureRecognizers = <NSArray: 0x7fa8586688e0>; layer = <CALayer: 0x7fa8586681f0>>
   |    | <UITableViewLabel: 0x7fa8586689f0; frame = (15 0; 345 43.5); text = 'sma111case'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fa858668c00>>
   | <_UITableViewCellSeparatorView: 0x7fa858669420; frame = (132.5 43.5; 243 0.5); layer = <CALayer: 0x7fa858646d80>>

注意 UITableViewCellDeleteConfirmationView 它就是刪除視圖,默認(rèn) backgroundColor 是紅色, _UITableViewCellActionButton 就是那個(gè)刪除按鈕,所以要自定義就是替換這兩個(gè)東西的事情啦,但要還要注意一個(gè)細(xì)節(jié),就是替換的時(shí)機(jī),這個(gè)刪除視圖是在顯示的時(shí)候創(chuàng)建的,然后在使用完畢后釋放,所以不能通過類似獲取屬性的形式獲取,因此,自定義的最好時(shí)機(jī)是在 layoutSubviews 方法中,大概就是這樣子

@implementation SCTableViewCell
- (void)layoutSubviews
{
    [super layoutSubviews];
    
    UIView *view = nil;
    
    for (UIView *v in self.subviews)
    {
        if ([v isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")])
        {
            view = v;
            break;
        }
    }
    
    // View=nil, subviews=nil, count=0都是false
    if (view.subviews.count)
    {
        // 安全拿到Button 
        UIButton *button = view.subviews[0];
        
        if (button)
        {
            // do sth....
        }
    }
    
}

最后,收工,祝各位看官愉快~~~

效果預(yù)覽:

Untitled.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市委刘,隨后出現(xiàn)的幾起案子蕴纳,更是在濱河造成了極大的恐慌士嚎,老刑警劉巖柒爸,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笛质,死亡現(xiàn)場離奇詭異汽纤,居然都是意外死亡瑞筐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門随橘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喂分,“玉大人,你說我怎么就攤上這事机蔗∑哑恚” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵萝嘁,是天一觀的道長梆掸。 經(jīng)常有香客問我,道長酿愧,這世上最難降的妖魔是什么沥潭? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮嬉挡,結(jié)果婚禮上钝鸽,老公的妹妹穿的比我還像新娘。我一直安慰自己庞钢,他們只是感情好拔恰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著基括,像睡著了一般颜懊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上风皿,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天河爹,我揣著相機(jī)與錄音,去河邊找鬼桐款。 笑死咸这,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的魔眨。 我是一名探鬼主播媳维,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼酿雪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侄刽?” 一聲冷哼從身側(cè)響起指黎,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎州丹,沒想到半個(gè)月后醋安,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡当叭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年茬故,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盖灸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚁鳖。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赁炎,靈堂內(nèi)的尸體忽然破棺而出醉箕,到底是詐尸還是另有隱情,我是刑警寧澤徙垫,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布讥裤,位于F島的核電站,受9級(jí)特大地震影響姻报,放射性物質(zhì)發(fā)生泄漏己英。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一吴旋、第九天 我趴在偏房一處隱蔽的房頂上張望损肛。 院中可真熱鬧,春花似錦荣瑟、人聲如沸治拿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劫谅。三九已至,卻和暖如春嚷掠,著一層夾襖步出監(jiān)牢的瞬間捏检,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工不皆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贯城,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓粟焊,卻偏偏與公主長得像冤狡,于是被迫代替她去往敵國和親孙蒙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫悲雳、插件挎峦、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,123評(píng)論 4 61
  • 走罷時(shí)鐘又轉(zhuǎn)了兩輪 莫不是當(dāng)時(shí)的晚燈 我輕輕眨了眨眼 傾瀉照你的背影深沉 才知味當(dāng)初的油鹽 灑脫歸灑脫的夢魘 轉(zhuǎn)身...
    Mr_十三閱讀 159評(píng)論 0 0
  • 傳統(tǒng)養(yǎng)殖目前很難吸引食客的興趣,并且魚目混雜合瓢,飼養(yǎng)成本又高坦胶,我們必須打破傳統(tǒng),走山珍野味路子才能大有可為晴楔。我們要搞...
    涮譚子閱讀 669評(píng)論 0 0
  • 長大后才慢慢懂得 原來并不是所有人都值得你用一種謙卑的方式去對(duì)待 因?yàn)橛械娜瞬恍家活?有的人自命不凡 原來不必...
    芒芒小果閱讀 148評(píng)論 0 0