替換返回按鈕的文字
很多app的要求所有的返回按鈕的title都是“返回”,如果上一層題目文字太多,下一層的返回按鈕文字就會顯示不完全,而且這樣可以使軟件顯得整潔。
方法一:
最普通的想法,A界面的navigationItem.backBarButtonItem修改的是B(A的下一級)界面的返回按鈕,所以可以寫一個BaseViewController,讓所有的UIViewController繼承它,像這樣
1 |
- (void)viewDidLoad { |
方法二:
思路是:在開啟程序時,使用Method Swizzling,將系統自帶的backBarButtonItem方法替換成我們自定義的方法。
具體實現就是創建個 UINavigationItem + BackItem 的類別,當系統執行+load方法時,將backBarButtonItem方法和myCustomBackButton方法交換,利用iOS關聯方法(objc_getAssociatedObject,objc_setAssociatedObject)在static區創建個backItemButton用來展示。這個方法的好處就是將類別導入到工程里不用任何代碼就可以實現,上代碼吧:
1 |
+(void)load{ |
返回按鈕只顯示自定義圖片
方法一:
最開始我的方案是實現UINavigationController的代理判斷是否是棧底,如果不是就修改leftBarButtonItem的樣式。
1 |
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated |
但iOS7.0出了之后,這並不是一個好的解決方案。因為iOS7.0之后如果把backItemButton替換成leftItemButon,interactivePopGestureRecognizer手勢就沒有了。雖然可以使用
1 |
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self; |
將手勢再加上,但實在是有些麻煩。。可是很多大公司用的都是這個方法。
方法二:
這個方法和上邊‘替換返回按鈕的文字’方法二大致一樣,這句話要替換:
1 |
item = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"] style:UIBarButtonItemStylePlain target:nil action:nil]; |
這句話要加上,用來去除系統自帶的返回按鈕上的尖腳號。
1 |
[[UINavigationBar appearance] setBackIndicatorImage:[[UIImage alloc]init]]; |
另外.....
我的願望是.......
世界和平.........
