2012-08-24 8 views
5

enter image description hereUIDatePicker Wybrana wartość jest nie tak w przypadku UIDatePicker nie było przewijane

Robię aplikację iPhone, w której używam UIDatePicker i wyświetlania wybrany czas w actionsheet. W oknie akcji wyświetlany jest czas z 10 interwałem mennic.

textfield wartość jest ustawiona poprawnie, kiedy nie przewijać Datepicker

Jeśli I NIE przewinąć arkusz akcja bezpośrednia następnie kliknij na przycisk wyboru pola tekstowego, a następnie ustawić aktualny czas (11:56) ale wybieram w arkuszu akcji (11:50) czas. (textfield) pokazuje niepoprawną wartość.

Jak ustawić wartość textfield (11:50). Daj mi jakieś rozwiązanie.

+0

NSLog wybranej wartości tzn. youdatepicker.date –

+0

wybierz [12:30] i nslog 12:37, jeśli nie przewijam ....i jeśli przewijam to [selcet 12:30] .. nslog 12:30 –

Odpowiedz

1

EDYTOWANIE Ustaw swoją klasę do obsługi zdarzenia UIControlEventValueChanged w swoim selektorze. Dodaj tę linię metodę viewDidLoad lub gdy pokazano Twój actionsheet:

[picker addTarget:self action:@selector(dateChanged:) 
      forControlEvents:UIControlEventValueChanged]; 

Teraz selektor będzie wywoływana, gdy data jest zmieniana

UPDATE

- (void) dateChanged:(id)sender{ 
    // handle date changes and set in textField 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    NSString *strdate = [dateFormatter stringFromDate:self.datePicker.date]; //provide your selected date here 
    self.dateTexField.text = strdate; 
} 

Jeśli powyższe metody nie nazywa oznacza data jest niezmienione, więc zawsze ustaw domyślną datę w polu tekstowym. data


Konwersja do obiektu String

UPDATE

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSString *strdate = [dateFormatter stringFromDate:self.datePicker.date]; //provide your selected date here 

Teraz ustaw wartość textField tak:

self.dateTextField.text = strdate; 
+0

robię to .. to będzie działać poprawnie, kiedy przewijam. ale nie w przypadku, gdy bezpośrednio stukam w przycisk wyboru –

+1

nie działający kod ur :( –

1

Wystarczy ustawić dateSelected ze swojego wyboru daty po wybierz przycisk naciśnij ....

NSDate *date = datePicker.date; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"dd/MM/yyyy"];  
NSString *dateString = [formatter stringFromDate:date]; 
yourTxtField.text = dateString; 
0

Myślę, że najprostszym sposobem jest po prostu dołączyć pasek z wykonanej przycisk do TextField, który ma UIDatePicker jako inputView. Śledź aktualny obszar TextField, zachowując odniesienie do niego w TextViewDidBeginEditing. Następnie w przycisk Gotowe zrobić coś takiego:

if (_currentTextField == _myTextFieldThatUsesADatePicker) { 
    self.myDateProperty = _myDatePicker.date; 
} 
0

Nie wiem, w ten sposób poprawny zły, ale jego praca dla mnie

-(void)selectedTime{ 
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 
// [outputFormatter setDateFormat:@"h:mm a"]; 
    [outputFormatter setDateFormat:@"HH:mm:ss"]; 
    selectedTime = [outputFormatter stringFromDate:datePicker.date]; 
    NSArray *temp=[selectedTime componentsSeparatedByString:@":"]; 
    NSLog(@"%@",temp); 
    NSInteger mins=[[temp objectAtIndex:1]integerValue]; 
    //check your interval here 
    if (mins<=29) { 
     selectedTime=[NSString stringWithFormat:@"%@:%@:%@",[temp objectAtIndex:0],@"00",@"00"]; 
    }else if (mins>=31 && mins<=59){ 
     selectedTime=[NSString stringWithFormat:@"%@:%@:%@",[temp objectAtIndex:0],@"30",@"00"]; 
    }else{ 
//  selectedTime = [outputFormatter stringFromDate:datePicker.date]; 
    } 
    if (self.delegate && [self.delegate respondsToSelector:@selector(SelectedValue:)]) { 
     [self.delegate SelectedValue:selectedTime]; 
    } 
    [self.popupController dismiss]; 
} 

Mój przedział jest 30 min