2011-01-18 13 views

cevap

4

Sınıfınızın UITextFieldDelegate protokolünü uyguladığından emin olun. Ben UIDatePicker içeren başka UIViewController kullanılması önerilir

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    //check if it is the UITextField you don't want the keyboard for 
    if (textField != dateTextField) 
     return TRUE; 

    //present your UIDatePicker 
    //see instructions below 

    //Return false to prevent the keyboard from appearing. 
    return FALSE; 
} 

ve bunu göstermek presentModalViewController kullanın: Sonra, YANLIŞ dönmek için shouldBeginEditing temsilci yöntemini geçersiz kılar. Bu, Kullanıcı Arayüzü Kılavuzuna uygundur.

+2

, bu yaklaşım ile bir problem var. Genel olarak sunulan görünüm denetleyicinizi şeffaf yapamazsınız çünkü altta yatan görüşler orada olmayacaktır. http://stackoverflow.com/questions/849458/transparent-modal-view-on-navigation-controller – kris

3

Aşağıdaki kodu kullanabilirsiniz;

//first of all, you have to declare the datePicker and then use the following code; 

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
[dateLabel resignFirstResponder]; //the textField that you will set the selected date 
datePicker = [[UIDatePicker alloc] init]; //declared uidatepicker component 

pickerViewDate = [[UIActionSheet alloc] initWithTitle:@"Select the date!" 
              delegate:self 
            cancelButtonTitle:nil 
           destructiveButtonTitle:nil 
            otherButtonTitles:nil]; 

datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)]; 
datePicker.datePickerMode = UIDatePickerModeDate; //set your spesific mode 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; //or another LocaleIdentifier instead of en_US 
[dateFormatter setDateFormat:@"dd.MM.yyyy"]; //desired format 

[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged]; //the function would be fired when user change the date in datePicker 

//now preparing the toolbar which will be displayed at the top of the datePicker 
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
pickerToolbar.barStyle=UIBarStyleBlackOpaque; 
[pickerToolbar sizeToFit]; 
NSMutableArray *barItems = [[NSMutableArray alloc] init]; 
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonClicked)]; //barbutton item is "DONE" and doneButtonClicked action will be fired when user clicks the button. 
[barItems addObject:flexSpace]; // set the left of the bar 

[pickerToolbar setItems:barItems animated:YES]; 
[pickerViewDate addSubview:pickerToolbar]; 
[pickerViewDate addSubview:datePicker]; 
[pickerViewDate showInView:self.view]; 
[pickerViewDate setBounds:CGRectMake(0,0,320, 464)]; //you can change the position 
} 

ve ek eylemler; Yalnızca ekranın alt kısmındaki datepicker istiyor ve tüm ekranı kaplayan değilse

-(IBAction)dateChanged{ 
    NSDateFormatter *FormatDate = [[NSDateFormatter alloc] init]; 
    [FormatDate setLocale: [[NSLocale alloc] 
         initWithLocaleIdentifier:@"en_US"]]; 
    [FormatDate setDateFormat:@"dd.MM.yyyy"]; 
    dateLabel.text = [FormatDate stringFromDate:[datePicker date]]; 
} 

-(BOOL)closeDatePicker:(id)sender{ 
    [pickerViewDate dismissWithClickedButtonIndex:0 animated:YES]; 
    [dateLabel resignFirstResponder]; 
    return YES; 
} 

-(IBAction)doneButtonClicked{ 
    [self closeDatePicker:self]; 
}