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的默认点击行为的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Chrome Console Cooki
- 下一篇: 【高并发解决方案】6、数据库水平切分的实