[iOS Dev] 點擊UITextField 跳出UIDatePicker以選取日期(生日,NSDate)

這篇文章講的功能 不會自動幫忙移動畫面以顯示原本的 UITextField
所以當 UIDatePicker 跳出來的時候 是有可能擋住 UITextField
我想應該是有辦法加 但我目前還沒仔細研究

首先在 ViewController.h 加上 delegate

1
2
3
4
5
6
7
8
// 加上 UITextFieldDelegate
@interface ViewController : UIViewController <UITextFieldDelegate> {
// 例子需要的變數
    UIDatePicker *datePicker;
    UITextField *dateTextField;
    NSLocale *datelocale;
}
@end

接著以下是 ViewController.m 要加的 method

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
- (void)viewDidLoad
{
    [super viewDidLoad];
 
// 建立 UITextField
    dateTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 120, 40)];
// 以下兩行是測試用 可以依照自己的需求增減屬性
    dateTextField.text = @"test";
    dateTextField.backgroundColor = [UIColor blueColor];
// 記得要設定 delegate
    dateTextField.delegate = self;
// 加入 view 中
    [self.view addSubview:dateTextField];
 
// 建立 UIDatePicker
    datePicker = [[UIDatePicker alloc]init];
// 時區的問題請再找其他協助 不是本篇重點
    datelocale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_TW"];
    datePicker.locale = datelocale;
    datePicker.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
    datePicker.datePickerMode = UIDatePickerModeDate;
// 以下這行是重點 (螢光筆畫兩行) 將 UITextField 的 inputView 設定成 UIDatePicker
// 則原本會跳出鍵盤的地方 就改成選日期了
    dateTextField.inputView = datePicker;
 
// 建立 UIToolbar
    UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
// 選取日期完成鈕 並給他一個 selector
    UIBarButtonItem *right = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self    
                                   action:@selector(cancelPicker)];
// 把按鈕加進 UIToolbar
    toolBar.items = [NSArray arrayWithObject:right];
// 以下這行也是重點 (螢光筆畫兩行)
// 原本應該是鍵盤上方附帶內容的區塊 改成一個 UIToolbar 並加上完成鈕
    dateTextField.inputAccessoryView = toolBar;
}
 
// 按下完成鈕後的 method
-(void) cancelPicker {
// endEditing: 是結束編輯狀態的 method
    if ([self.view endEditing:NO]) {
// 以下幾行是測試用 可以依照自己的需求增減屬性
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"yyyy-MM-dd" options:0 locale:datelocale];
        [formatter setDateFormat:dateFormat];
        [formatter setLocale:datelocale];   
// 將選取後的日期 填入 UITextField
        dateTextField.text = [NSString stringWithFormat:@"%@",[formatter stringFromDate:datePicker.date]];   
    }
}

這樣基本上應該就可以動了
沒有使用 ARC 的話 記得要把該 release 的 release 掉

posted on 2013-06-03 16:35  晏晟  阅读(308)  评论(0编辑  收藏  举报

导航