2011-09-17 65 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将被调用时,两次用户实际上旋转车轮。

更新:虽然上述解决方案不适用于UIPickerViews。在这些情况下,我不知道如何达到想要的行为。

+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; 
} 
相关问题