これを理解できません... ContainerView内のビューにgestureRecognizerを追加していますが、オプションの値をアンラップしているときに予期せず見つかったnilが返されます。私は何が間違っているのですか?:
これは、コンテナビューを持つVC内にあります。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EmbedMenu" {
if let vc = segue.destination as? MenuViewController {
let tap = UITapGestureRecognizer(target: self, action: #seclector(tapHamburger)
vc.hamburgerBtn.addGestureRecognizer(tap) // Optional unwrapping error happens here
}
}
}
/* --------- GESTURE METHODS ---------- */
/* ----------------------------------- */
func tapHamburger() {
if hamburgerOpen {
hamburgerOpen = false
UIView.animate(withDuration: 0.3, animations: {
self.masterContainer.frame.origin.x = self.masterContainerX
}, completion: nil)
} else {
hamburgerOpen = true
UIView.animate(withDuration: 0.3, animations: {
self.masterContainer.frame.origin.x += 220
}, completion: nil)
}
}
そして、これはコンテナビューの埋め込みVCです。
class MenuViewController: UIViewController {
@IBOutlet weak var hamburgerBtn: UIView!
override func viewDidLoad() {
super.viewDidLoad()
}
}
hamburgerBtn
オプションです。暗黙的にアンラップされますが、それでもオプションです。マークが付いているので@IBOutlet
、ボタンはストーリーボードで定義されていると思います。つまり、ビューが読み込まれるまで変数はnilになります。したがって、MenuViewControllerviewDidLoad
が呼び出されたときまたは呼び出された後に使用できます。
問題は、viewDidLoad
が呼び出された後prepare(for:sender:)
に呼び出されます。
MenuViewControllerに変数を追加して、ジェスチャレコグナイザーを保持できます。prepare
メソッドに変数を設定し、のビューに追加しviewDidLoad
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加