0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

swiftでUIBarButtonItemが動かなくて激しくはまった件

Last updated at Posted at 2017-03-07

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にアクセスできなくなったことが
原因として考えられるが、同じ実装でも大丈夫な場合もあって、発見がめちゃくちゃ遅れてしまった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?