酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Textfieldからdatepickerを表示 Doneボタン付き[Objective-C]

Objective-Cで、UITextFieldをクリックしたらDatePickerが表示されるサンプルです。ちょっと試行錯誤しましたが、出来上がるとかなりシンプルなソースです!

(8-13 10:40) 完了ボタンを追加しました!


サンプル

ヘッダファイル

ヘッダファイルにUITextFieldDelegateを追加。

1
2
@interface ViewController : UIViewController<UITextFieldDelegate>
@end

実装ファイル

実装ファイルのサンプルは以下の通り。

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
51
- (void)viewDidLoad
{
    [super viewDidLoad];

    // UITextFieldの設定
    CGRect rectBIR = CGRectMake(10, 345, 300, 25);
    UITextField textField = [[UITextField alloc]initWithFrame:rectBIR];

    // DatePickerの設定
    UIDatePicker* datePicker = [[UIDatePicker alloc]init];
    [datePicker setDatePickerMode:UIDatePickerModeDate];

    // DatePickerを編集したら、updateTextFieldを呼び出す
    [datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];

    // textFieldの入力をdatePickerに設定
    textField.inputView = datePicker;

    // Delegationの設定
    textField.delegate = self;

    // DoneボタンとそのViewの作成
    UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
    keyboardDoneButtonView.barStyle  = UIBarStyleBlack;
    keyboardDoneButtonView.translucent = YES;
    keyboardDoneButtonView.tintColor = nil;
    [keyboardDoneButtonView sizeToFit];

    // 完了ボタンとSpacerの配置
    UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"完了" style:UIBarButtonItemStyleBordered target:delegate action:@selector(pickerDoneClicked)];
    UIBarButtonItem *spacer1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:spacer, spacer1, doneButton, nil]];

    // Viewの配置
    textField.inputAccessoryView = keyboardDoneButtonView;

    [self.view addSubview:textField];
}

#pragma mark DatePickerの編集が完了したら結果をTextFieldに表示
-(void)updateTextField:(id)sender {
    UIDatePicker *picker = (UIDatePicker *)sender;
    textField.text = [NSString stringWithFormat:@"%@", picker.date];
}

#pragma mark datepickerの完了ボタンが押された場合
-(void)pickerDoneClicked {
    [_birth resignFirstResponder];
    _activeField = nil;
}

Special Thanks

bencoffman.com/blog - iOS, Want a “button” above a UIPicker or Keyboard, inputView, inputAccessoryView

datepicker - Iphone Display Date Picker on TextField click - Stack Overflow

おすすめの書籍