web-dev-qa-db-ja.com

Swift 3.0ナビゲーションバーへの右ボタンの追加

View Controllerの上部にNavigation Barを追加しました。条件に基づいてボタンを表示するかどうかを制御しようとしていますが、ボタンの追加に問題があります。これまでのところ、

var addButton: UIBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))

override func viewDidLoad() {
    super.viewDidLoad()

    let boool = true
    if boool {
        self.navigationItem.rightBarButtonItem = self.addButton
    }
    else {
        self.navigationItem.rightBarButtonItem = nil
    }
}

func addTapped(sender: AnyObject) {
    print("hjxdbsdhjbv")
}

ナビゲーションコントローラーを使用してそこでバーを操作するのではなく、VCにナビゲーションバーを追加したため、正しく機能していないと思います。このナビゲーションバーを操作する方法があるかどうか疑問に思っていました。

19
Kevin

ストーリーボードを介してView ControllerにUINavigationBarを追加したと言いますが、提供したコードを見ると、IBのナビゲーションバーへのアウトレット接続はありません。

self.navigationItemにアクセスするには、View ControllerをUINavigationControllerに埋め込むか、階層の一部にする必要があります。個々のView ControllerにカスタムNavigation Barが必要でない限り、Interface Builderから削除し、問題のView ControllerがUINavigationControllerに埋め込まれているか、Navigationにプッシュされていることを確認することをお勧めしますNavigation Controllerに組み込まれている別のコントローラーからスタックすると、UIBarButtonItemが表示されます。

5
Kyle H

それは簡単です。次のコード行をviewDidLoadに追加します。

self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))

Swift 4以降に更新:

カスタム関数:

@objc func action(sender: UIBarButtonItem) {
    // Function body goes here
}

(カスタム)右バーボタンアイテム:

self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))

(カスタム)左バーボタンアイテム:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))

次のようなシステムバーボタン項目を追加することもできます。UIBarButtonItem.SystemItemバーボタン項目のシステム提供の画像を定義します:.add、.done、.cancel、.edit 、.save、.compose、.reply、.organizeなど。

(システム)右バーボタンアイテム:

self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))

(システム)左バーボタンアイテム:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))
45
Mannopson
let rightBarButtonItem = UIBarButtonItem.init(image: UIImage(named: "EditImage"), style: .done, target: self, action: #selector(ViewController.call_Method))

self.navigationItem.rightBarButtonItem = rightBarButtonItem
8
Urvish Modi

まず、ナビゲーションバーをIBOutletに接続して、コードで参照できるようにする必要があります。その後、このコードは動作するはずです:

    let navigationItem = UINavigationItem(title: "Title")
    navigationItem.rightBarButtonItem = self.addButton
    navigationItem.hidesBackButton = true
    self.navigationBar.pushItem(navigationItem, animated: false)
1
Stefan S

Swift 4.2;

viewControllerを追加

override func viewDidLoad() {
        super.viewDidLoad()
        self.addNavigationBarButton(imageName: "ic_back", direction:.left)
 }

ClassをAPIまたはユーティリティクラスに追加します

public func addNavigationBarButton(imageName:String,direction:direction){
    var image = UIImage(named: imageName)
    image = image?.withRenderingMode(.alwaysOriginal)
    switch direction {
    case .left:
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
    case .right:
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
    }
}

@objc public func goBack() {
    self.navigationController?.popViewController(animated: true)
}

public enum direction {
    case right
    case left
}
1
ikbal

xcode 10.2でテスト済み、Swift 5.0;最初に、IBのUINavigationControllerにViewControllerを埋め込みました。次に、ViewDidLoadにこれらの行を含めます

self.title = "orange"
 self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(changeLayout)).

注-タイトルへのアクセス、またはNavigation Controllerを介したボタンの追加は機能しませんでした。たとえば、タイトルの設定-Self.navigationcontroller.navigationItem.titleは機能しませんでした。

0
akr ios