2012-01-02 20 views
3

UISwitchは、.xibファイルで定義されています。私が接続しているイベントは「値が変更されました」です。UISwitchが状態を変更しないようにするにはどうすればよいですか?

私は、次の動作(基本的に、この機能は、ソフトウェアの完全なVesionで利用可能であることをユーザーに警告を)欲しい:

  1. 」にスライディングからスイッチを防ぐ
  2. スイッチ上でユーザーがクリックできるようにします
  3. 」(私はスイッチが滞在したい 『オフ』の位置)には、アラート

はこれまでのところ、私は仕事に2を取得することはできません表示されます。今私はkludgeを持っています。私は、OFFの位置に戻るようにスイッチを強制:

[self.switchButton setOn:NO animated:NO]; 

UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
alert.tag = ALERT_TAG; 
[alert show]; 

問題は、あなたがそれをOFF位置にジャンプし、ON位置にスイッチスライドを参照して、アラートボックスが表示されていることです。

スイッチがONの位置にスライドしないように動作を傍受する方法はありますか?

UPDATE

私は「TouchUpInside」イベントにリンクアップしてみました、そこに私の警告コードを移動しました。まだスイッチの状態の視覚的変化を傍受するのに十分な早さではありません。

+0

「self.switchbutton.enabled = NO」のようなものはありますか? –

+0

私は実際にそれを無効にしたくありません。そうした場合、ユーザーはアラートをトリガーできなくなります。 – milesmeow

+0

@milesmeow - あなたが今いる行動は、私にとってはうまく見えます。ユーザーがタップしてアラートを取得し、スイッチがオフに戻ります。 –

答えて

1

はXIBでオフにUISwitchの状態を設定し、valueChange内部動作方法

-(IBAction) switchValueChanged{ 
if (toggleSwitch.on) { 
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
    alert.tag = ALERT_TAG; 
    [alert show]; 
} 
} 
+0

この作品はありましたか?私は同じ問題を抱え、valueChangeアクションを聞いています。私はトグルスイッチをオフに設定し、それがオンからオフに急に切り替わるのを見ます。 – bantic

+0

@banticは正しいです、うまくいきません –

2

一つの素朴な解決策は、単にUISwitch制御の前に同じ大きさと透明な背景色でボタンを入れています。あなたの質問への直接的な答えではありませんが、それは素晴らしい回避策です。私はいつもUIImageViewでそれを行います。

+0

私はそれも考えました。それが他の方法で働くことができなければ、それはkludgeの解決策になります。 :p。 – milesmeow

1

TouchUpInsideの代わりにTouchDownイベントを聞くようにしてください。 uは、単にNO

[self.switchButton setUserInteractionEnabled:NO]; 
2

は、そのUISwitchビューに鮮明なカラーサブビューを追加し、それをカバーし、このサブビューにUITapGestureReconizerを追加し、すべてのアクションの操作が変更を含むタップ動作にトリガすることができますUISwitchビューのステータス。それがあなたを助けることを願って!

2

にuserInteractionを設定していけないのはなぜ

5

私はあなたのような同じ問題を抱えていました。あなたのvalueChangedアクションメソッドでは、animatedをtrueに設定してsetOnメソッドを呼び出さなければなりません。そうだろうSWIFTに:スイッチ値が変更された後に、このメソッドが呼び出されているため

@IBAction func switchValueChanged(sender: UISwitch) { 
    sender.setOn(false, animated: true) 
} 

それは直感に反するように見えるかもしれません。しかし、どういうわけか、それはうまくいくようです。

+0

これです。また、sender.setOn(...)を呼び出すとvalueChangedイベントは発生しませんが、sender.isOn = falseは実行されることに注意してください。 –

関連する問題