iOS自定義導(dǎo)航返回按鈕:滑動(dòng)返回上一層時(shí)導(dǎo)致程序卡死解決

PS:大家可以在自己的UINavigationController的rootViewController中先不停的在左側(cè)邊右滑,做類似滑動(dòng)返回的操作,多做幾次,然后在點(diǎn)擊某個(gè)Button或cell跳轉(zhuǎn)到下級(jí)界面,很多時(shí)候在這里會(huì)卡?。▋H限自定義過導(dǎo)航返回按鈕的工程)

很多中小型項(xiàng)目UI都是使用UITabBarController+UINavigationController來搭建項(xiàng)目的基本開發(fā)框架,但是系統(tǒng)的基本功能無法滿足產(chǎn)品UI的需求,因此UITabBarController和UINavigationController都需要我們進(jìn)行自定義。

兩者的自定義其實(shí)都很簡單,直接構(gòu)造一個(gè)子類,在子類中對(duì)原生的按鈕、背景的顏色和文字等進(jìn)行修改。

新建一個(gè)類AANavigationController繼承自UINavigationController,其中包含兩個(gè)類別,一個(gè)控制按鈕與邊界的距離,一個(gè)控制支持的方向,可根據(jù)自己的需求來選擇是否需要和修改。關(guān)于這兩個(gè)類別,只貼代碼,不進(jìn)行過多說明。

PS:在這篇文章中,我只貼圖片,不貼代碼。Why ??不是我作,貼代碼,很多人就會(huì)選擇復(fù)制粘貼,對(duì)于一個(gè)程序員,復(fù)制粘貼的東西,你永遠(yuǎn)不會(huì)記在腦海里,但如果是自己一行一行敲出來的,哪怕不是自己寫的,效果就有天翻地覆的差別。

margin類別的實(shí)現(xiàn):

Rotation類別的實(shí)現(xiàn):

AANavigationController的實(shí)現(xiàn),因?yàn)樽约喉?xiàng)目需求,在這里只進(jìn)行導(dǎo)航條背景顏色和標(biāo)題顏色修改,返回按鈕樣式自定義。(因?yàn)檫@些在我們的項(xiàng)目中都是統(tǒng)一的)

自定義返回按鈕,會(huì)導(dǎo)致滑動(dòng)返回功能失效,在這里需要進(jìn)行開啟,但并不是所有地方我們都需要進(jìn)行滑動(dòng)返回,該禁止的地方還是要禁止。

很多工程都是使用UITabBarController+UINavigationController,UITabBarController中每一個(gè)item都是一個(gè)控制器,這時(shí),我們還需要在UITabBarController中禁止導(dǎo)航的rootViewController的滑動(dòng)返回。

以下是繼承于UITabBarController的類的實(shí)現(xiàn):主要是使用UINavigationControllerDelegate來控制返回到rootViewController時(shí),禁止滑動(dòng)返回功能。

最開始時(shí),本想在自定義的導(dǎo)航控制器中對(duì)根視圖進(jìn)行禁止操作,經(jīng)過測(cè)試,pop方法被執(zhí)行時(shí),導(dǎo)航控制器中的controllers還是2個(gè),此時(shí)進(jìn)行禁止操作,對(duì)頁面會(huì)有影響,具體的影響忘記了(好像是有時(shí)候我們滑動(dòng)返回到一半時(shí),又不想返回,just joke,自動(dòng)彈回當(dāng)前頁面,這種情況會(huì)導(dǎo)致當(dāng)前頁無法使用滑動(dòng)返回功能,有興趣的可以自行測(cè)試),所以只能在徹底返回到root時(shí)再下手。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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