日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 修改UITabBar的默认点击行为

發布時間:2024/4/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 修改UITabBar的默认点击行为 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目截圖

當我接到如上圖這個需求的時候,評估了一下。感覺如上圖的效果用自定義UITabBar的方式就可以實現了(做法類似新浪微博的自定義UITabBar中的不規則按鈕),沒錯,就是干。一番折騰之后,我實現了自己的自定義UITabBar,然后一經測試,問題出來了。

當navigationController擁有超過2個ViewController的時候,我使用self.navigationController popToViewController: animated:方法的時候會出現系統自帶的UITabBar的按鈕和我自定義UITabBar的按鈕重疊的問題。

這下坑爹了吧,我明明在自定義UITabbar按鈕的時候把系統自帶的UITabbar里面的控件刪掉了啊!那要不將就著用吧,不要使用popToViewController操作就好了吧,這個是坑爹和坑隊友了,讓團隊里的其它人都不能使用self.navigationController popToViewController: animated:方法了。

這個時候就要換個思路來了,我一定要自定義UITabBar么? 有沒有辦法點擊按鈕的時候不要去跳到某個ViewController,而是執行自定義的事件。并且本來UITabBar里面的按鈕的圖片也是可以調位置的,這樣是不是就完美解決這個需求了呢?程序員就是一類不斷遇到問題并解決問題的人吶。

找到了UITabBarController的代理UITabBarControllerDelegate,看了看里面的方法,有發現了。點擊了UITabBar的按鈕之后,UITabBarController會執行UITabBarControllerDelegate的以下方法,并將要跳轉到的UIViewController作為參數傳遞給一下代理方法。如果代理方法返回YES那么UITabBarController就會正常跳轉,如果返回NO,那么就不會做跳轉動作。方法如下:

- (BOOL)tabBarController:(UITabBarController*)tabBarController shouldSelectViewController:(UIViewController*)viewController

理清思路了,接下來就上代碼了。


1、為了方便,基本上所有的代碼都是寫在AppDelegate

2、分別創建了A,B,C,D這四個ViewController,每個ViewController有一個用于區別彼此的文本。

3、為每個ViewController創建對應的UITabBarItem。

4、創建四個對應ViewController的對象。

5、將ViewController的對象放到數組容器里面。

6、設置UITabBarController的viewControllers屬性,設置UITabBarController的代理,設置UITabBarController為window的RootViewController。

再來一個圖


7、實現UITabBarController的隊友代理方法,判斷是否是要跳轉到D ViewController,如果是的話,那么就不要跳轉了,如果不是那么不做處理。

8、做出一個彈窗提示,做Demo我就比較隨意點嘍,還是直接用UIAlertView來提示。

9、如左邊模擬器運行圖所示,點擊第四個按鈕,會有彈窗出現,Xcode底部輸出對應的LOG。

10、這個彈窗只是做一個拋磚引玉的效果,在捕捉到UITabBar的按鈕點擊事件之后,你就可以實現你的業務邏輯了,而且不用擔心和系統UITabBar的兼容問題(因為你本來就沒有做改變),也不用擔心隊友的各種popToViewController操作

總結

以上是生活随笔為你收集整理的iOS 修改UITabBar的默认点击行为的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。