2011-01-23 35 views
34

Bạn sẽ làm như thế nào?iPhone datepicker thay vì bàn phím?

Tôi có biểu mẫu với UITextField. Khi tôi nhấp vào nó, tôi muốn hiển thị một UIDatePicker thay vì bàn phím mặc định bật lên theo mặc định? Lưu ý rằng cũng có các yếu tố khác trên biểu mẫu của tôi.

+0

Tại sao không sử dụng UIDatePicker thay vì UITextField? –

+0

Thiết kế tùy chỉnh ... – xpepermint

+0

bạn có mã cho điều này không? Tôi đang đối mặt với cùng một vấn đề cũng như – aherlambang

Trả lời

85

Tôi nghĩ rằng đây là một cách chính thức hơn để làm điều này:

UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; 
datePicker.tag = indexPath.row; 
textField.inputView = datePicker; 
+0

Tính năng này không hoạt động đối với tôi trong iOS 5. Trường văn bản vẫn hiển thị bàn phím thông thường khi được nhấp. Sau khi thiết lập textField.inputView với một con trỏ hợp lệ và sau đó kiểm tra nó ngay lập tức sau đó, nó trở lại không. Bất kỳ ai có một ý tưởng tại sao? Tôi đang thiết lập nó trong viewDidLoad. – Oscar

+2

kiểm tra xem liệu "datePicker" ivar của bạn không phải là số – NSExplorer

+3

điều này hoạt động hoàn toàn tốt, nhưng làm thế nào để ẩn bộ chọn ngày sau ngày đã được chọn – Noor

8

trong .h

UIDatePicker *datePicker; 
NSDate *date; 
UIToolbar *keyboardToolbar; 

trong viewDidLoad:

if (keyboardToolbar == nil) { 
    keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; 
    [keyboardToolbar setBarStyle:UIBarStyleBlackTranslucent]; 

    UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

    UIBarButtonItem *accept = [[UIBarButtonItem alloc] initWithTitle:@"Accept" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard:)]; 

    [keyboardToolbar setItems:[[NSArray alloc] initWithObjects: extraSpace, accept, nil]]; 
} 

self.txtDate.inputAccessoryView = keyboardToolbar; 

datePicker = [[UIDatePicker alloc] init]; 
datePicker.datePickerMode = UIDatePickerModeDate; 
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; 

self.txtDate.inputView = datePicker; 


- (void)datePickerValueChanged:(id)sender{ 

date = datePicker.date; 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"dd/MM/YYYY"]; 


[self.txtDate setText:[df stringFromDate:date]]; 
} 

trong storyboard thêm vào txtDate -> EditingDidEnd

- (IBAction)establishHour:(id)sender{ 

hour = hourPicker.date; 

NSDateFormatter *hf = [[NSDateFormatter alloc] init]; 
[hf setDateFormat:@"HH:MM"]; 

[self.txtHour setText:[hf stringFromDate:hour]]; 

} 

Đặt bàn phím làm DatePicker và tạo thanh công cụ bằng nút để chấp nhận lựa chọn.

+2

Để cải thiện chất lượng bài đăng của bạn, vui lòng bao gồm cách/tại sao mã này sẽ giải quyết được sự cố. –

+0

CerrarTeclado là gì? – lolol

+1

- (void) cerrarTeclado: (id) người gửi { [self.txtFecha resignFirstResponder]; } –

0
(IBAction)estableceHora:(id)sender{ 
    Hora = horaPicker.date; 
    NSDateFormatter *hf = [[NSDateFormatter alloc] init]; 
    [hf setDateFormat:@"HH:MM"]; 
    [self.txtHora setText:[hf stringFromDate:Hora]]; 
} 
-1

gia tăng trong các tập tin .h:

UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> 

gia tăng trong các tập tin .m:

{ 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

df.dateStyle = NSDateFormatterMediumStyle; 

pTxtDate.text = [NSString stringWithFormat:@"%@", 

[df stringFromDate:[NSDate date]]]; 

NSLog(@"pTxtDate.text %@",pTxtDate.text); 

[df release]; 

[self.view addSubview:pTxtDate]; 

[pTxtDate release]; 

DatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 250, 325, 300)]; 

DatePicker.datePickerMode = UIDatePickerModeDate; 

DatePicker.hidden = NO; 

DatePicker.date = [NSDate date]; 

[DatePicker addTarget:self 

    action:@selector(LabelChange:) 

forControlEvents:UIControlEventValueChanged]; 

[self.view addSubview:DatePicker]; 

    [DatePicker release]; 

} 



- (void)LabelChange:(id)sender { 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

df.dateStyle = NSDateFormatterMediumStyle; 

pTxtDate.text = [NSString stringWithFormat:@"%@", 

[df stringFromDate:DatePicker.date]]; 

} 
3

tôi đã chuyển đổi câu trả lời Johan Kool của thành nhanh chóng nếu có ai muốn nó. Tôi đã đặt mã trong viewDidLoad.

let datePicker = UIDatePicker() 
datePicker.datePickerMode = UIDatePickerMode.Date 
datePicker.addTarget(self, action: "datePickerValueChanged:", forControlEvents: UIControlEvents.ValueChanged) 
textField.inputView = datePicker 
Các vấn đề liên quan