iOS backBarButtonItem設置

1、在很多項目中,會看到一個控制器的左上角有一個返回的小按鈕,這個按鈕有2種情況,一種是backBarButtonItem(自帶滑動效果,同時可以返回),一種是leftBarButtonItem(不帶滑動效果,可以返回)。對於這2種情況,下面簡單分析一下。
2、leftBarButtonItem:顧名思義,就是導航欄的左側按鈕。這個item可以用系統的方法創建,也可以自定義一個button來實現:

// 利用圖片創建
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:<#(nullable UIImage *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullable id)#> action:<#(nullable SEL)#>]

// 利用文字創建
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:<#(nullable NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullable id)#> action:<#(nullable SEL)#>

// 利用自定義button創建
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [backBtn setBackgroundImage:[UIImage imageNamed:@"navigation_back"] forState:UIControlStateNormal];
    backBtn.frame = (CGRect){CGPointZero,backBtn.currentBackgroundImage.size};
    [backBtn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];

上面的3種方法都可以創建一個leftBarButtonItem,但可能效果不太一樣,如果想要實現特殊的效果,建議用自定義實現,這樣製藥控制button的效果就好了。
leftBarButtonItem點擊之後,一般就是返回到上層控制器,但是leftBarButtonItem不具備滑動返回上級菜單的,只能通過點擊返回。

3、backBarButtonItem自帶滑動效果,同時可以返回上級菜單,具備leftBarButtonItem的返回功能。

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init];
    UIImage* image = [UIImage imageNamed:@"navigation_back"];
    [backItem setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [backItem setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) forBarMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = backItem;

backBarButtonItem最好通過[[UIBarButtonItem alloc] init]方式創建,通過[[UIBarButtonItem alloc] initWithTitle:<#(nullable NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullable id)#> action:<#(nullable SEL)#>這種方式創建的話,貌似有問題,不建議這樣創建。

backBarButtonItem不支持添加action,即便是添加了事件,也不會執行操作,因此不需要利用普通的添加事件的方法創建它,利用[[UIBarButtonItem alloc] init]就可以了。

另外backBarButtonItem的創建是在上層控制器種創建的,在下層控制器才能實現效果,簡單來說,比如我有2個控制器ViewController1,ViewController2,並且是ViewController1 push到ViewController2,在ViewController2的左上角需要顯示返回按鈕,因此backBarButtonItem的創建代碼需要在ViewController1中實現,ViewController2中不需要實現任何backBarButtonItem的代碼就能實現push到ViewController2後擁有滑動返回效果,如果ViewController2 push到ViewController3,同樣只需在ViewController2中實現backBarButtonItem,ViewController3就擁有返回效果了。

4、如果設計需求需要滑動返回效果的話,只實現backBarButtonItem就可以了,但是有一點[self presentViewController:navc animated:YES completion:nil];實現的控制器需要自己寫leftBarButtonItem了。

發佈了44 篇原創文章 · 獲贊 16 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章