2011-09-17 58 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; 
} 
相關問題