2011-01-18 40 views

Trả lời

4

Đảm bảo lớp học của bạn triển khai giao thức UITextFieldDelegate. Sau đó, ghi đè lên các phương pháp shouldBeginEditing đại biểu để trả về FALSE:

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

tôi khuyên bạn nên sử dụng một UIViewController có chứa một UIDatePicker và sử dụng presentModalViewController để hiển thị nó. Điều này tuân theo Nguyên tắc giao diện người dùng.

+2

có vấn đề với cách tiếp cận này, nếu bạn chỉ muốn datepicker ở dưới cùng của màn hình, và không bao gồm toàn bộ màn hình. Bạn không thể làm cho bộ điều khiển xem được trình bày một cách minh bạch trong suốt, bởi vì các khung nhìn cơ bản sẽ không có ở đó. http://stackoverflow.com/questions/849458/transparent-modal-view-on-navigation-controller – kris

5

UITextField cung cấp cơ chế cho việc này. Bạn được cho là có thể thiết lập một khung nhìn khác (giống như một datepicker) làm inputView. Xem bài đăng này:

iPhone datepicker instead of keyboard?

3

Bạn có thể sử dụng mã sau đây;

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

và các hành động khác;

-(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]; 
}