このコードを標準のMVCプロジェクトで実行すると、すべて正常に動作します。プログラムでUISliderにアクションを送信できます。UISlider addTargetとsendActionsがUTで動作しない
override func viewDidLoad() {
super.viewDidLoad()
slider = UISlider(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
slider.minimumValue = 1
slider.maximumValue = 100
slider.addTarget(self, action: #selector(sliderTouch), for: .touchUpInside)
slider.sendActions(for: .touchUpInside)
}
func sliderTouch(sender: UISlider) {
print("value: \(sender.value)")
}
私のUTでスライダー動作をシミュレートしたいときは、何らかの理由で動作しません。ここでのコードは次のとおりです。
func testSlider() {
let slider = UISlider(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
slider.minimumValue = 1
slider.maximumValue = 100
slider.addTarget(self, action: #selector(sliderTouch), for: .touchUpInside)
slider.sendActions(for: .touchUpInside)
}
func sliderTouch(sender: UISlider) {
print("value: \(sender.value)")
}
sliderTouch()
はUTの場合には、私の理解から呼び出されることはありません、sendActionsはasnyc
ではなく、直接アクションメソッドを呼び出す必要があります。
なぜこの動作が発生していますか?これをどのように解決できますか?迅速な3については、私もそのようなUISwitch
、UISegmentedControl
、UIDatePicker
などなど、他のUIKitコントロールのために働く必要があります...
あなたはタッチを捕まえたいですか? –
このテストはコンポーネントのUIKitで提供されているアクションディスパッチの機能とどのように関係していますか?タッチ操作をテストしたい場合は、 'sliderTouch(sender:slider)'のようにアクションメソッドを直接呼び出すことができます。 (それはあなたの 'testSlider'テスト機能が通過するので、常に、実際のテストアサーションを持っていないこと、これを明確に役立ちません。) –
JeremyW.Sherman @私のユースケースは、上記のスニペットではありません。私はちょうど主な問題が何であるかを示すスニペットを書いた。実際には、特定の方法でアクションディスパッチに反応するライブラリ内にカスタムスライダがあり、その動作が正しいことをテストしたい。上記のスニペットでアサーションを書いていないので、私はあなたを混乱させずに問題をクリアにしてみてください:) –