2017-08-08 6 views
0

私のアプリケーション全体でナビゲーションコントローラの戻るボタンのデフォルトの外観を変更しようとしています。私のアプリケーション全体でカスタムの戻るボタンを作成する

「画像」(アイコン)を使用して「戻る」テキストを削除したいと考えています。 このコードは、ボタン全体に画像を引き伸ばし、ボタンのタイトルを削除しません。

let backImg: UIImage = UIImage(named: "icon_back")! 
UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, for: .normal, barMetrics: .default) 

行う方法勧告はAppDelegate(didFinishLaunchingWithOptions)の内部にありますか?

+0

UIViewControllerの基本サブクラスを作成します。 –

+0

@ElTomatoもう少し詳しく教えてもらえますか?ご協力ありがとうございました。 –

答えて

1

簡単な方法は、UIViewControllerから派生したBaseViewControllerという1つのプロジェクトを作成することです。すべてのviewControllerにcustom leftBarButtonを作成するには、BaseViewControllerの共通メソッドを使用できます。プロジェクトの残りのViewControllerはderived from this BaseViewController

class BaseViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     createLeftBarButton(image: #Pass image here#, width: #Pass width of your image view#) // Create custom back bar button. 
    } 

    /**Create cutom back bar button*/ 
    func createLeftBarButton(image: UIImage?, width: CGFloat) { 

     let backButton: UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: width, height: 50)) 
     backButton.imageView?.contentMode = .scaleAspectFill 
     backButton.imageView?.bounds = CGRect(x: 0, y: 0, width: width, height: width) 
     backButton.setImage(image, for: .normal) 
     backButton.setImage(image, for: .highlighted) 
     backButton.addTarget(self, action: #selector(leftBarButtonItemPressed(_:)), for: .touchUpInside) 

     let leftItem: UIBarButtonItem = UIBarButtonItem(customView: backButton) 
     navigationItem.leftBarButtonItem = leftItem 

    } 

    /**Custom back bar button pressed. So handle here*/ 
    func leftBarButtonItemPressed(_ sender: UIButton) { 

     view.endEditing(true) // End editing if any. 
     if isViewControllerPresented() { // Check view controller is presented or pushed 
      dismiss(animated: true, completion: nil) // Dismiss ViewController if presented 
     } else { 
      _ = navigationController?.popViewController(animated: true) // Pop ViewController if pushed 
     } 

    } 

    /**To check whether view controller is presented or pushed.*/ 
    func isViewControllerPresented() -> Bool { 

     if self.presentingViewController?.presentedViewController == self { 
      return true 
     } 
     if (self.navigationController != nil && self.navigationController?.presentingViewController?.presentedViewController == self.navigationController) && self.navigationController?.viewControllers.count == 1 { 
      return true 
     } 
     if self.tabBarController?.presentingViewController is UITabBarController { 
      return true 
     } 
     return false 

    } 

    } 

// Sub class your remaining viewControllers like this. 
class FirstViewController: BaseViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() // When calling this super method, the custom back bar button will be created for you 
    } 

} 

感謝しなければなりません。

0

これを行うには、navigationItemBackButtonBackgroundImageを設定します。

また、あなたがグローバルな効果のために外観を設定することができます。

@implementation UINavigationItem (BackItem)

-(UIBarButtonItem *)backBarButtonItem { UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil]; item.tintColor = [UIColor darkGrayColor]; return item; }

let item = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]) item.setBackButtonBackgroundVerticalPositionAdjustment(-10, for: .default) item.setBackButtonBackgroundImage(youImage, for: .normal, barMetrics: .default)


バックタイトルを除去するために、あなたは次のように行うことができます

@end

関連する問題