web-dev-qa-db-ja.com

swift:ナビゲーションバーに戻るボタンの画像を設定する

コントローラのナビゲーションバーに戻るボタンの画像を設定しようとしています。viewDidLoad()のコードは次のとおりです。

        var backImg: UIImage? = UIImage(named: "back_btn.png")
    println(backImg)
    if var back_img = backImg  {
        println("GET IT")
        println(back_img)
        println(UIControlState.Normal)
        println(UIBarMetrics.Default)
    self.navigationController.navigationBar.backItem.backBarButtonItem.setBackButtonBackgroundImage(back_img, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
    }

それらをviewWillLoadに入れようとしましたが、同じエラーが発生しました

エラーメッセージのあるコンソール:

<UIImage: 0x7ff37bd85750>
GET IT
<UIImage: 0x7ff37bd85750>
VSC14UIControlState (has 1 child)
(Enum Value)
fatal error: unexpectedly found nil while unwrapping an Optional value

どこがおかしいのかわかりません。 back_imgはnilではないようですが、nilであるというエラーが表示されました

ありがとう!

12
fuiiii

私はサンプルコードを調べることで理解しました。 1)ストーリーボードにバーボタンアイテムを作成します。 2)IBOutletを使用してそのボタンをコントローラーにリンクします3)ボタンに画像を追加します

 var backImg: UIImage = UIImage(named: "back_btn")
 backBtn.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)

PS:画像はImages.xcassetsフォルダーに追加する必要があります。詳細については、サンプルコード ICatalog を参照してください。

13
fuiiii

Swift 3.0 +appdelegatedidFinishLaunchingWithOptionsメソッドのコードの下に置くと、完全に機能します

let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)

またはSwift 4.0 +

let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)

タイトルを削除したくない場合は、最後の行でNavigation Back Buttonのタイトルを削除し、最後の行を削除します

22
Shahid Aslam

すべてのコントローラーで戻るボタンを変更したい場合は、didFinishLaunchingWithOptionsでこれをアプリデリゲートに追加できます。

    let backImg: UIImage = UIImage(named: "back_button")!
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)
17
Jaro
    self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back-icon")
    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back-icon")
11

//デフォルトのナビゲーションバーの画像とアクションを使用して戻るボタンを設定するのに最適なソリューションです

最初にナビゲーションバーにUIBarButtonを追加します

enter image description here

次に、ストーリーボードのファイルインスペクターのプロパティに移動し、スペースを追加してボタンのタイトルテキストを元に戻します

Uiバーボタンの画像に画像を設定

enter image description here

/クリックアクションメソッドで書き込む/

スワイプのポップ(前のコントローラーに戻る)を有効にするには、ViewDidLoadメソッドに2行のコードを記述します

enter image description here

そしてアニメーションをスワイプして戻る完璧な戻るボタンを取得します

enter image description here

//注:-戻るボタンの前のビューコントローラのタイトルを無効にするには、ストーリーボードファイルインスペクタの戻るボタンのタイトルテキストにスペースを1つ追加します

4
Mehul

別の方法:ストーリーボードのナビゲーションコントローラーをクリックします(UIViewController自体のナビゲーションコントローラーではありません)。次に、RHSの属性セクションに、バックイメージとバックマスクが表示されます。後ろの画像をセットすれば完了です。

1
zevij

Swift 4+バージョン

let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)
0
Abhishek Jain