私はやや厄介な問題があります。私のアプリでは、ボタンをプログラムでスワップし、関連するセレクターを適切に呼び出すことができるツールバーがあります。しかし、ナビゲーションバーのボタンに同じテクニックを適用すると、セレクタを呼び出すことができません。次のサンプルコードには、2セットのボタンが含まれています(1つはナビ用&ツールバーのものです)。同じであるにもかかわらず、ナビゲーションバーボタンのセレクタは決して呼び出されません。UIBarButtonItemがツールバーに追加されている間に、ナビゲーションバーにプログラムで追加された呼び出しセレクタに失敗しました
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var toolbar: UIToolbar!
let navCancelButton = UIBarButtonItem(barButtonSystemItem: .cancel,
target: self,
action: #selector(toggleDelete))
let navTrashButton = UIBarButtonItem(barButtonSystemItem: .trash,
target: self,
action: #selector(toggleDelete))
let toolbarCancelButton = UIBarButtonItem(barButtonSystemItem: .cancel,
target: self,
action: #selector(toggleDelete))
let toolbarTrashButton = UIBarButtonItem(barButtonSystemItem: .trash,
target: self,
action: #selector(toggleDelete))
var isDeleting = false {
didSet {
navigationItem.rightBarButtonItem = isDeleting ? navCancelButton : navTrashButton
toolbar.items = isDeleting ? [toolbarCancelButton] : [toolbarTrashButton]
}
}
override func viewDidLoad() {
super.viewDidLoad()
isDeleting = false
}
@objc func toggleDelete() {
isDeleting = !isDeleting
}
}
これは、アクションの前のコードを示しています
を使用しているの下に私の答えをチェック:あなたが行ったようにNAVの項目を初期化する方法がありますターゲットを失うことなく –