iOS UITableView左滑操做功能的實現(iOS8-11)

做者:sonia,騰訊移動客戶端開發 工程師
商業轉載請聯繫騰訊WeTest得到受權,非商業轉載請註明出處。
原文連接:http://wetest.qq.com/lab/view/366.htmlhtml

WeTest 導讀

本文主要是介紹下iOS 11系統及iOS 11以前的系統在實現左滑操做功能上的區別,及如何自定義左滑的標題顏色、字體大小。ios


1、左滑操做功能實現

一、若是左滑的時候只有一個操做按鈕,可使用以下三個delegate方法來實現:數組

圖片描述

二、若是左滑有一個或多個操做按鈕,iOS8-10 可以使用以下兩個delegate工具

圖片描述

3、iOS 11以後,tableView的delegate增長了兩個方法,用來取代editActionsForRowAtIndexPath方法,以下:測試

圖片描述

在2和3中,若是是須要適配iOS 11以前的版本,以上三個方法都須要實現。字體

四、上面1.2和1.3中實現的方法的區別優化

體驗上的不一樣就是當左滑只有一個button時,iOS 11中能夠一直左滑,滑到必定程度時,會執行點擊按鈕的操做,iOS 11以前的不會。spa

iOS 11以前若是想增大button區域,可經過在標題先後加空格的方式,但iOS 11不行,加空格無效,button大小固定,超過4個字時換行顯示。視頻

2、左滑操做自定義標題顏色、字體

由於系統對左滑出的按鈕只提供了3個可設置的屬性:title、backgroundColor、image,若是使用自定義的titleColor和font,就須要本身來實現了。實現的思想是hook系統實現,但鑑於UITableView的view層級結構在iOS 11中有所改變,因此iOS8-10和iOS11的實現有所不一樣,如下分別給出。htm

考慮到代碼的可複用性,自定義左滑操做的字體大小和顏色的代碼不寫在viewController中,而是寫在UITableView和UITableViewCell的Category中,對外提供editActionTitleColor和editActionTitleFont屬性來設置顏色和大小,須要使用自定義顏色和字體時只須要設置一下這兩個屬性便可。

一、iOS 8-10 設置標題顏色和字體

左滑操做後,UITableView的層級結構以下圖:

圖片描述

由上圖可知,左滑的操做按鈕是在UITableViewCell的子view,因此咱們能夠在UITableViewCell的category中hook掉layoutSubviews方法,找到UITableViewCellDeleteConfirmationView的子view button,設置字體顏色和大小。

代碼以下:

圖片描述

二、 iOS 11 設置標題顏色和字體

左滑操做後,UITableView的層級結構以下圖:

圖片描述

由上圖可知,左滑的操做按鈕是在UITableView的子view,因此咱們能夠在UITableView的category中hook掉layoutSubviews方法,找到UISwipeActionPullView的子view button,設置字體顏色和大小。

代碼以下:

圖片描述

3、遇到的問題及緣由分析

一、問題是iOS 11上設置顏色有延遲,顏色有一個明顯的跳變,從系統默認色跳轉到我設置的顏色

有問題的代碼以下:

圖片描述

二、問題緣由分析

當左滑一個cell後,直接操做左滑另外一個cell,這個時候tableView上會有兩個UISwipeActionPullView,此時tableView的部分view層級以下圖所示:

圖片描述

而上面的代碼,在__findSwipActionButton方法中,找到其中一個UISwipeActionPullView上面的button就直接返回了,沒有設置第二個UISwipeActionPullView的button的顏色,致使顯示了系統默認色。

三、解決方法

將以上有問題的代碼修改成如下代碼:找出全部的UISwipeActionPullView,返回UISwipeActionPullView的button數組,對button數組進行設置字體顏色和大小,這個數組最多有兩個元素,由於左滑出下一個cell時,上一個cell會逐漸消失,當此cell左滑操做完成時,上一個左滑的cell也會完成消失。

解決後的代碼如二(2)的示例代碼。


騰訊WeTest iOS預審工具

爲了提升IEG蘋果審覈經過率,騰訊專門成立了蘋果審覈測試團隊,打造出iOS預審工具這款產品。通過1年半的內部運營,騰訊內部應用的iOS審覈經過率從平均35%提高到90%+。

現將騰訊內部產品的過審經驗,以線上工具的形式共享給各位。在WeTest騰訊質量開放平臺上能夠在線使用。
點擊 http://wetest.qq.com/product/ios 便可當即體驗!

若是使用當中有任何疑問,歡迎聯繫騰訊WeTest企業QQ:800024531


iOS預審服務

【掃描工具】上傳IPA包、圖片、視頻、應用描述便可進行測試; 多維度自動掃描提審材料的被拒風險;1小時內反饋全面的掃描報告。

【專家預審】騰訊專家爲您遍歷App全部功能模塊;全面暴露App內容被拒風險;跟進問題直至上線(需提供官方拒絕郵件)。

【專家諮詢】資深預審專家一對一服務; 諮詢時間靈活可選,按需購買;有的放矢解 決審覈問題。

【ASO優化】專業團隊多維度深度剖析App的ASO現狀;圍繞App目標用戶羣篩選高 度關聯的關鍵詞;幫助提高App在蘋果應用商店中的曝光率。

相關文章
相關標籤/搜索