2016-03-19 2 views
0

各ページに異なるxibビューが表示されるように、ページ設定が有効な水平スクロールビューがあります。一部のxibビューには、IBActionにリンクされたボタンがあります。各xibのクラスにIBActionを宣言します。ボタンはエフェクトとすべてをクリックして表示されるように見えますが、IBActionは起動されません。ここ は、コードサンプルです:スクロールビュー内のUIViewsボタンがIBActionをトリガーしない

let clockView: ClockViewController = ClockViewController(nibName: "ClockViewController", bundle: nil) 

    let carView: CarViewController = CarViewController(nibName: "CarViewController", bundle: nil) 

    scrollview.addSubview(clockView.view) 

    carView.view.frame.origin.x = self.view.frame.width 

    scrollview.addSubview(carView.view) 

clockViewとカービューの両方がそれらのボタンがあり、ボタンはそれぞれClockViewController.swiftとCarViewController.swiftで宣言さIBActionsにリンクされています。

ここでは、どのように表示されるかを示します。私はUIViewControllerをxibに追加していないので、UIViewのみを使用しています。私はこれが問題の一部になる可能性があると推測していますが、エラーが発生したため、私はUIViewControllerをサブビューとして使用できません。 enter image description here

enter image description here

enter image description here すべてのヘルプは高く評価され 、

+0

'filesOwner'とは何ですか? – Paulw11

+0

fileOwnerは同じxibクラスで、感謝の気持ちを示すために質問を更新しました。 – fullMoon

+0

あなたの問題は、ローカル変数に 'CarView'を置いているので、e関数が終了したときに解放されるということです。インスタンス変数/プロパティに入れてみてください – Paulw11

答えて

1

問題は、ローカル変数としてcarViewを宣言しているということなので、何もないよう関数が終了したら、それがリリースされる予定強い参照を保持する。ビュー要素自体はスクロールビューによって参照されるため、解放されませんが、イベントを処理するView Controllerインスタンスは存在しなくなります。

carViewclockViewをプロパティに変更すると、強い参照が保持されます。

0

問題は、ViewControllers内部ViewControllersを使用しているようです。これをストーリーボード経由で行う場合は、containerViewを使用し、このコンテナビュー内にViewControllerを配置する必要があります。このコンテナビューには、付属の埋め込みセグを使用します。

プログラムでこれを行うには、carviewとclockViewの子ビューコントローラを含む親ビューコントローラに子ビューコントローラを追加する必要があります。

P.S.それはおそらくCarViewControllerはあまり混乱して、あなたのビューコントローラcarViewを呼び出していることを少し混乱だ:)

+0

ありがとう、混乱のために申し訳ありません。あなたは正しい私は別のUIViewControllerの中でUIViewControllerを使用することはできませんし、私にはエラーが出ましたので、UIViewControllerをxibで使用していません。 – fullMoon

関連する問題