Storyboardに張り付けたUIBarButtonItemが全く動かなくて焦った件をメモしておきます。
viewDidLoad内でこんなコードを書いて、
ViewController.swift
class ViewController: UIViewCOntroller {
@IBOutlet weak var barButtonItem:UIBarButtonItem!
override func viewDidLoad() {
let helper = Helper()
helper.set(button: barButtonItem)
}
Helperはこんなコードになってる。
Helper.swift
public class Helper {
public func set(button:UIBarButtonItem) {
button.target = self
button.action = #selector(buttonTouched)
}
@objc private func buttonTouched() {
print("touched!!")
}
}
で、ボタンを押してもウンともスンともいわないのだが、
結果的にhelperをインスタンス変数にすることで、正常に動いた。
ViewController.swift
class ViewController: UIViewController {
@IBOutlet weak var barButtonItem:UIBarButtonItem!
private var helper:Helper!
override func viewDidLoad() {
helper = Helper()
helper.set(button: barButtonItem)
}
}
helperがメモリから消え去って、buttonTouchedにアクセスできなくなったことが
原因として考えられるが、同じ実装でも大丈夫な場合もあって、発見がめちゃくちゃ遅れてしまった。