簡體   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