繁体   English   中英

检测用户在UIDatePicker中点击选择指示符的时间?

[英]Detect when user taps the selection indicator in a UIDatePicker?

如何检测用户何时在UIDatePicker中点击选择指示符?

如果没有这个,用户必须滚动到其他日期,然后再返回以选择日期选择器向上滑动时显示在选择指示器下的日期。

非常感谢,
斯坦

向上滑动时,日期选择器会滚动到当前日期

更新:这是我能想出的唯一解决方案:

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。 在这些情况下,我不知道如何实现通缉行为。

你可以用这种方式做一些调整: -

在.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.

//以下是Delegate方法

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

//双击时会触发下面的方法

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

试试这段代码:

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
    }
}

这是一个老问题,但这是我为了获取UIDatePicker上的选择栏rect而做的。 有了这个,你可以添加一个带有手势识别器的按钮/视图来检测水龙头。 这有点像黑客,但似乎在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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM