2017-05-14 1 views
0

内部にカスタム表示を持つ警告コントローラを作成しようとしています。カスタムビューはxibファイルからロードされます。カスタムビューには、uiswitchが含まれています。問題は、クリックイベントがトリガーされておらず、UIスイッチがクリックでオン/オフされないということです。ここで私が上で動作しようとしているコードは次のとおりです。ボタン内部のボタンでのカスタム表示は、iOSでは動作しません。

これは、アラートを提示する私のビューコントローラのボタンクリックイベントである:

@IBAction func btnClicked(_ sender: UIButton) { 
     let alertController = UIAlertController(title: "\n\n\n\n\n\n", message: "", preferredStyle: UIAlertControllerStyle.alert) 
     let customView=Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)!.first! as! CustomView 
     let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: {(alert: UIAlertAction!) in print("cancel")}) 
     alertController.addAction(cancelAction) 
     let somethingAction = UIAlertAction(title: "Something", style: .default, handler: {(alert: UIAlertAction!) in print("something")}) 
     alertController.addAction(somethingAction) 

     alertController.view.addSubview(customView) 
     self.present(alertController, animated: true, completion:{}) 
    } 

は、これはのCustomViewクラス内のコードです:

class CustomView: UIView { 
    @IBAction func switchClicked(_ sender: UISwitch) { 
     print("switch cliked") 
    } 
} 

私のCustomView.xibファイルは、参照レイアウトが適切に設定されています。それはちょうど1つのuiswitchを持っています。 CustomView.xibのサイズは「フリーフォーム」に設定されています(問題があるかどうかはわかりません)。私はまた、isUserInteractionEnabledをfalseに設定しようとしました。あるいは、同様の問題を検索しても何も動作しなかった後に、CustomViewやalertController.viewのさまざまな場所でtrueになりました。

+1

UISwitchにターゲットを追加すると、「valueChanged」を選択しましたか? – Lawliet

+0

はい。私はvalueChangedイベントをキャプチャしています。 uiswitchの問題ではありません。問題は、一般的なボタンの種類にあります。単純なuibuttonを配置しても、そのクリックメソッドはトリガされません。 –

答えて

0

あなたはvalueChanged制御イベントをキャプチャする必要がありますが、あなたはクリックを経由して、プログラムで値の変更を行いたい場合、私はあなたができるとします

class CustomView: UIView { 
    @IBAction func switchClicked(_ sender: UISwitch) { 
     sender.setOn(!sender.isOn, animated: true) 
    } 
} 
+0

はい、値が変更されました。私はUISwitchの値の変化をキャプチャするためにアウトレットを参照するように設定しました。問題は、デバッグ中にスイッチをUIから変更せず、switchClickedイベントを起動しないことです。 –

0

私は同じクラスになっている場合にのみ、XIBビューの意志のtriger方法を考えますメモリにロードされます。あなたの場合、これは問題かもしれません。これをテストするには、uがアラートを表示している同じクラスにカスタムビューを追加できます。

関連する問題