2016-07-18 16 views
0

UISliderが所定の進捗に達したときにperformSegue:を実行しようとしています。それは瞬時にスライドの相互作用を無効にすることは可能ですか?UISliderのインタラクションを一時的に無効にする

私はすでにfalseからenableduserInteractionEnabledを設定し、バックtrueにし、無効にして再度有効に関連付けられたジェスチャ認識装置を反復、resignFirstResponderを使用してみました。この選択肢のいずれも、所望の効果をもたらさなかった。

私は、将来のイベントのためにアクティブなままにしておきたいが、現在のイベントのやりとりを止めたい。ユーザーのやりとりを無効にしてその機能を無効にしても、私の問題は解決されません。

答えて

0

ブール型インスタンス変数triggeredを使用します。 ValueChangedイベントに応答している場合は、それが真であるかどうかを確認してください。それ以外の場合は変数をtrueに設定し、segueを実行します。 TouchCancelイベントで変数をfalseに戻します。

+0

インタラクションは停止せず、ユーザーは引き続きスライダーをスライドできます – fpg1503

0

UISliderはUIControlを継承しているため、コントロールのブール値をYESまたはNOに設定すると、有効な状態が切り替わります。無効にすると、スライダーは不透明に見えます。 またUIControlがUIViewから継承するので、userInteractionEnabledのブール値を設定すると、ユーザーイベントが無視されるかどうかが切り替わります。無効にすると、スライダは正常に見えますが移動しません。

これは、スライダの使用を開始し、その方法でメソッドを選択し、そのメソッドで.enabledまたは.userInteractionEnabledを使用すると、あなたが離れるまで、すなわちそのメソッドを繰り返し呼び出すまで。いったんやり直すと、コントロールの設定が有効になります。 呼び出されたメソッドが複数回実行されるのを避けるには、そのメソッドの先頭でフラグの状態を照会し、yesに設定されている場合はそのメソッドから戻ります。クエリの直後に、Boolフラグをyesに設定します。もちろん、コード内のどこかで(メソッドが目的を果たしたとき)フラグをnoに設定します(または、連続プロパティをNOに設定しておくと便利です) :

-(void)methodSelectedBySlider 
    { 
    if (_inSelectedMethodFlag==YES) { 
     return; 
    } 

    _inSelectedMethodFlag = YES; 
関連する問題