SubView(xib)からViewControllerに接続したIBOutletが使えない。
UIViewController(以下hogeViewController)クラスのviewDidLoad()内で、
let subView:UIView = UINib(nibName: "hogeSubView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView self.view.addSubview(subView)
という感じでカスタムxibからUIViewを生成して、UIViewControllerのviewにaddSubviewしています。
このhobeSubViewにはButtonを配置して、hogeViewControllerにIBOutletとして接続しています。(Ctrl+Dragにて)
@IBOutlet weak var button: UIButton!
ビルドは通るのですが、hogeViewControllerのビューを表示すると以下のエラーがでます。
hogeSubView.xibファイルのFile's OwnerもhogeViewControllerに設定しています。
@IBOutletではなく、@IBActionだと、動作します。
何かxibとコントローラーの接続設定で足りていないものがあるのでしょうか?
もしくは、そもそもViewとコントローラーの関係を間違って認識しているのでしょうか?
###エラーメッセージ
'NSUnknownKeyException', reason: '[<NSObject 0x17001eab0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key button.'
どうぞ宜しくお願いします。
###追記
上記は、hogeViewControllerのviewDidLoad()内でxibを読み込んでaddSubviewしていますが、
別のコントローラー A_ViewController内で
let vc = hogeViewController(nibName: "hogeSubView", bundle: nil)
という感じで、ViewControllerにxibの引数を渡して初期化すると上記エラーもなく、IBOutletおよびIBActionともに正常に呼べました。
以下のxibの読み込み方では、ControllerとIBOutletがうまく接続されない感じなのですが、理由はわからないままです。
let subView:UIView = UINib(nibName: "hogeSubView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView self.view.addSubview(subView)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/06 10:32
2017/03/09 15:54