UIDatePicker を非表示にする別の方法を使用しました。
XIB (nib) ファイルを作成し、それに UIDatePicker を追加してから、ビューのサイズを変更して UIDatePicker のみに収まるようにし、ViewController (または使用している任意のクラス) にプロパティを作成 (強力で非アトミックにする) し、もちろん合成します)。
@property (nonatomic, strong) UIView *myDatePickerView;
@synthesize myDatePickerView;
次に、loadDatePickerView メソッドを作成します
- (void) loadDatePickerView
{
UINib *nib = [UINib nibWithNibName:kNIBname bundle:[NSBundle mainBundle]];
NSArray *views = [nib instantiateWithOwner:self options:nil];
self.myDatePickerView = [views firstObject];
[myDatePickerView setFrame:CGRectMake(0, 318, 320, 162)];
[self.view addSubview:myDatePickerView];
}
UITextFieldDelegate を実装し、textFieldDidBeginEditing メソッドで loadDatePickerView メソッドを呼び出し、
[self loadDatePickerView];
関数にUIDatePicker インスタンスであるプロパティを作成させる
@property (nonatomic,strong)
UIDatePicker *myDatePicker;
(もちろん合成)
次のようにIBActionを作成します。
-(IBAction)datePickerValueChanged:(UIDatePicker *)sender
{
myDatePicker = [[myDatePickerView subviews] lastObject];
//now you can do whatever you want with the DatePicker
}
IBAction を XIB ファイルのピッカーに接続します。これにより、XIB は VC で作成した UIDatePicker インスタンスになり、非表示にしたい場合は、UITapGestureRecognizer (ViewDidLoad 内)を追加でき、セレクターは別の IBAction になります。次のように、そのスーパービューから myDatePickerView を削除します。
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dropPicker:)];
[self.view addGestureRecognizer:tap];
[self datePickerValueChanged:myDatePicker];
}
-(IBAction)dropPicker:(id)sender
{
[myDatePickerView removeFromSuperview];
}