2011-09-17 4 views
4

ユーザがUIDatePickerの選択インジケータをタップすると、どのように検出できますか?ユーザがUIDatePickerで選択インジケータをタップすると検出しますか?

これがなければ、他の日付にスクロールしてから、もう一度戻って日付ピッカーがスライドしたときに選択インジケータの下に表示される日付を選択する必要があります。

どうもありがとう、
スタイン

The date picker is scrolled to current date when sliding up

UPDATE:

UIDatePicker *aDatePicker = [[UIDatePicker alloc] init]; 
self.datePicker = aDatePicker; 
[aDatePicker release]; 
[self.datePicker addTarget:self action:@selector(datePicked:) forControlEvents:UIControlEventValueChanged]; 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(datePicked:)];  
[self.datePicker addGestureRecognizer:tap]; 
[tap release]; 

datePickedが二回したときに呼び出されることを意味します。これは、私は自分自身を考え出すことができる唯一のソリューションです。ユーザは実際に車輪を回転させる。

更新:上記の解決方法は、UIPickerViewでは機能しません。私はそのような場合に望ましい行動を達成する方法を知らない。

+0

それができないと感じている:(Soooo迷惑な! – Stine

+2

私はなぜあなたがこれを望むのか分からない。なぜなら、最初に設定された日付に対して 'UIControlEventValueChanged'アクションが実行されないからです。最初の選択を得るために、日付ピッカーの 'date'プロパティを使うのはなぜですか?または、私はそのポイントを完全に逃していますか? – omz

+0

+1、私は完全に@omzに同意します – ender

答えて

5

あなたは、このようにいくつかの微調整を行うことができます -

があなたの.hファイル内のデリゲート<UIGestureRecognizerDelegate>を準拠

UITapGestureRecognizer* gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pickerViewTapGestureRecognized:)]; 
[yourDatePicker addGestureRecognizer:gestureRecognizer]; 
gestureRecognizer.delegate=self; 
gestureRecognizer.numberOfTapsRequired=2;//Whenever you do double tap it will called. So allow user to do double tap on selected date. 

//以下は、デリゲートメソッド

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

です//ダブルタップを実行すると、以下のメソッドがトリガーされます

-(void)pickerViewTapGestureRecognized:(UITapGestureRecognizer*)recognizer 
{ 
    UIDatePicker *datePicker=(UIDatePicker*)[[recognizer view] viewWithTag:101]; 
    NSLog(@"datePicker=%@", datePicker.date); 
} 
2

は、このコードを試してみてください。

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pickerViewTapped:)]; 

[recognizer setNumberOfTapsRequired:2]; 
[recognizer setCancelsTouchesInView:NO]; 
[recognizer setDelaysTouchesEnded:NO]; 
[recognizer setDelaysTouchesBegan:NO]; 

[self.answerPicker addGestureRecognizer:recognizer]; 

// .... 

- (IBAction)pickerViewTapped:(UITapGestureRecognizer *)sender { 
    CGPoint coord = [sender locationInView:self.answerPicker]; 
    if(coord.y <= 126 && coord.y >= 90) { 
     //do something 
    } 
} 
1

は、これは古い質問ですが、ここUIDatePicker上の選択バー四角形をつかむために私がやったことです。これにより、タップを検出するジェスチャ認識機能を備えたボタン/ビューを追加するだけです。これはちょっとしたハックですが、iOS6とiOS7ではうまく機能しているようです。

+ (CGRect)getSelectionBarRectFromPicker:(UIDatePicker *)picker 
{ 
    int counter = 0; 
    CGRect selectionBarRect; 
    for(UIView *datePickerView in picker.subviews){ 
     for(UIView *subview in datePickerView.subviews){ 
      if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0){ 
       if([NSStringFromClass([subview class]) isEqualToString:@"_UIPickerViewSelectionBar"]){ 
        if(counter == 0){ 
         selectionBarRect.origin = subview.frame.origin; 
         selectionBarRect.size.height = subview.frame.size.height; 
        } 
        selectionBarRect.size.width += subview.frame.size.width; 
        counter++; 
       } 
      } else { 
       if(subview.frame.size.height < 1){ 
        if(counter == 0){ 
         selectionBarRect.origin = subview.frame.origin; 
         selectionBarRect.size.width = subview.frame.size.width; 
        } else { 
         selectionBarRect.size.height = subview.frame.origin.y - selectionBarRect.origin.y; 
        } 
        counter++; 
       } 
      } 
     } 
    } 
    return selectionBarRect; 
} 
関連する問題