點(diǎn)擊Cell上按鈕出現(xiàn)Cell的左滑刪除編輯界面 - runtime小應(yīng)用

iOS自帶左滑刪除燎孟,只要設(shè)置可編輯就可以了缤弦;如果想自定義刪除界面的顯示彻磁,則可以看一下這篇文章,定制你想要的左滑界面累提。

但是某天產(chǎn)品經(jīng)理說:某些安卓用戶可能不知道左滑這個(gè)操作磁浇,要加一個(gè)按鈕,也要有相同的操作无虚;崩潰中...工作還是要繼續(xù)衍锚,沒辦法要生存嘛戴质;開始擼代碼踢匣。戈抄。。

當(dāng)我們不知道怎么實(shí)現(xiàn)一個(gè)功能的時(shí)候输莺,我一般的步驟時(shí):

1:先看一下現(xiàn)有控件支不支持漾稀,能不能實(shí)現(xiàn)這個(gè)需求崭捍;

command + 鼠標(biāo) 點(diǎn)擊進(jìn)UITableViewCell的API文件中,遍歷一遍有沒有可用方法或者屬性

找到:

?- (void)setEditing:(BOOL)editing animated:(BOOL)animated;?

嘗試一下实夹,然而并沒有什么卵用粒梦;

UITableView也有這個(gè)方法,設(shè)置一下并不是我們想要的效果缴淋;

繼續(xù)找泄朴,然后,然后就沒有了钟沛。局扶。三妈。

2:百度,谷歌

網(wǎng)上都是一些自定義刪除樣式的博客說明由捎,并沒有實(shí)現(xiàn)這種需求的類似demo饿凛,博客等;(可能有心肪,我沒搜到纠吴,據(jù)說是有一個(gè)自定義cell實(shí)現(xiàn),但是我沒找到)

3:自己實(shí)現(xiàn)固该,想各種方法

3.1伐坏,自定義界面:

想著自定義一個(gè)cell握联,自己實(shí)現(xiàn)這種效果,但是自己實(shí)現(xiàn)的總感覺效果不好纯露,動(dòng)畫不流暢代芜,還要改很多代碼,想想都麻煩钞速,想著蘋果都有這種效果了看看能不能從其他方式實(shí)現(xiàn)罚随;

3.2淘菩,研究系統(tǒng)自帶的實(shí)現(xiàn)原理,調(diào)用底層方法來實(shí)現(xiàn)它:

? ? ? 回顧之前第一步調(diào)用UITableView 的- (void)setEditing:(BOOL)editing animated:(BOOL)animated;會(huì)出現(xiàn)一個(gè)紅色減號(hào)狭郑,點(diǎn)擊這個(gè)減號(hào)就會(huì)出現(xiàn)這個(gè)效果汇在;這就有兩種思路來處理:

第一種:找到觸發(fā)動(dòng)畫的方法糕殉,直接調(diào)用Runtime方法發(fā)送消息

? ? ? ?由于無法看到源碼殖告,那就想辦法看到調(diào)用方法的順序雳锋,找到方法名就好;而查找方法調(diào)用順序最好的調(diào)試方法就是打斷點(diǎn)看調(diào)用堆棧爽丹,斷點(diǎn)打在哪呢粤蝎?UITableViewCellStateMask 這個(gè)枚舉是cell編輯時(shí)所處于的狀態(tài)袋马,而UITableViewCellStateShowingDeleteConfirmationMask這個(gè)狀態(tài)就是處于顯示刪除的狀態(tài);監(jiān)測這個(gè)狀態(tài)就好谤狡,幸好系統(tǒng)給了我我們這個(gè)方法- (void)willTransitionToState:(UITableViewCellStateMask)state墓懂,重寫這個(gè)方法霉囚,并打斷點(diǎn)調(diào)試查看調(diào)用堆棧

打斷點(diǎn)看調(diào)用堆棧

找到能實(shí)現(xiàn)那個(gè)的那個(gè)方法盈罐,看方法名找到setShowingDeleteConfirmation: 這個(gè)方法,參數(shù)應(yīng)該是bool類型的钓葫;在按鈕的惦記方法直接調(diào)用:

?objc_msgSend(self, NSSelectorFromString(@"setShowingDeleteConfirmation:"),YES);?

調(diào)用這個(gè)必須倒入頭文件:#import<objc/message.h> 票顾,如果上述方法報(bào)錯(cuò)看這里

這樣就可以實(shí)現(xiàn)需求奠骄,但是這種方法的弊端是[tableView setEditing:NO];失效了,造成這種情況的原因是我們直接發(fā)送消息并沒有從點(diǎn)擊按鈕的執(zhí)行方法影锈,而是半路插入,解決辦法是

在調(diào)用[tableView setEditing:NO]的地方改用發(fā)消息:

objc_msgSend(self, NSSelectorFromString(@"_animateSwipeCancelation"));

自己測試了一下是沒有問題的枣抱,也沒有出現(xiàn)閃退或者其他bug靴姿;

這種方式智能在Xcode8.0才能實(shí)現(xiàn)佛吓;如果你的Xcode8.0要是支持7.0的系統(tǒng)的話垂攘,這種方式就是不行的,可能是系統(tǒng)在升級(jí)的時(shí)候某些方法優(yōu)化了

如果非要支持7.0的就比較麻煩了吱型,因?yàn)樯厦娴哪欠N方式取巧了陨仅,正好動(dòng)畫就是在那個(gè)方法中或者之后執(zhí)行的灼伤,因此可以使用;但是iOS7.0的庫中的方法就不知道在那個(gè)方法執(zhí)行了狐赡,也不知道執(zhí)行條件颖侄,所以就要尋求另外一種方式了;

第二種方法孝鹊,找到紅色按鈕展蒂,不出意外的話應(yīng)該是繼承自UIControl的玄货,然后直接響應(yīng)事件(這種操作比較保險(xiǎn),但是代碼較多夹界,改動(dòng)的也比較多)


具體步驟:

3.2.1:點(diǎn)擊button的時(shí)候設(shè)置[tableView setEditing:YES],使紅色編輯按鈕被創(chuàng)建現(xiàn)實(shí)出來鸠踪;同時(shí)記錄當(dāng)前編輯的cell

animationBlock是cell的一個(gè)回掉block复斥;
?設(shè)置只有操作的cell才可編輯营密,出現(xiàn)紅色按鈕

3.2.2:找到紅色編輯按鈕,直接觸發(fā)紅色按鈕的響應(yīng)事件目锭,這樣就能實(shí)現(xiàn)我們想要的效果了

找到紅色編輯按鈕方法UITableViewCellEditControl可在姨媽巾中看到


查找紅色按鈕
找到紅色按鈕是一個(gè)是UIControl類型的评汰,直接出發(fā)點(diǎn)擊方法,紅色圖標(biāo)隱藏


3.2.3痢虹,效果出現(xiàn)之后被去,在用戶操作完成之后要確保之前設(shè)置的東西歸位

在調(diào)用[tableView setEditing:NO animated:NO];方法后會(huì)觸發(fā)該方法,然后將編輯時(shí)所設(shè)置的一些改變還原奖唯,保證左滑手勢不會(huì)出問題

這樣就大功告成了,demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丰捷,一起剝皮案震驚了整個(gè)濱河市坯墨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌病往,老刑警劉巖捣染,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荣恐,居然都是意外死亡液斜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門叠穆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來少漆,“玉大人,你說我怎么就攤上這事硼被∈舅穑” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嚷硫,是天一觀的道長检访。 經(jīng)常有香客問我,道長仔掸,這世上最難降的妖魔是什么脆贵? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮起暮,結(jié)果婚禮上卖氨,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好筒捺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布柏腻。 她就那樣靜靜地躺著,像睡著了一般系吭。 火紅的嫁衣襯著肌膚如雪五嫂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天肯尺,我揣著相機(jī)與錄音沃缘,去河邊找鬼。 笑死则吟,一個(gè)胖子當(dāng)著我的面吹牛孩灯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逾滥,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼败匹!你這毒婦竟也來了寨昙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤掀亩,失蹤者是張志新(化名)和其女友劉穎舔哪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體槽棍,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉蚤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炼七。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缆巧。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豌拙,靈堂內(nèi)的尸體忽然破棺而出陕悬,到底是詐尸還是另有隱情,我是刑警寧澤按傅,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布捉超,位于F島的核電站,受9級(jí)特大地震影響唯绍,放射性物質(zhì)發(fā)生泄漏拼岳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一况芒、第九天 我趴在偏房一處隱蔽的房頂上張望惜纸。 院中可真熱鬧,春花似錦、人聲如沸堪簿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椭更。三九已至哪审,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虑瀑,已是汗流浹背湿滓。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舌狗,地道東北人叽奥。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像痛侍,于是被迫代替她去往敵國和親朝氓。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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