22

私はiOSに非常に慣れていないので、このソリューションに従おうとすると明らかにいくつかの概念が欠けています 私の問題のテキストフィールドをタップすると日付ピッカーが表示されます。

DatepickerAppDelegate というクラスにインターフェイスと実装がありますが、ここで迷ってしまいます。

「XIB では、UIToolbar と UIDatePicker を引き出しますが、ビューにはアタッチしません。アウトレットを適切に接続します。dateChanged: 日付ピッカーの変更に応答し、doneEditing: は、ツールバーの [完了] ボタンが押されたときに呼び出されます。クリック. それらも接続します. メソッドは次のように実装されています.

XIBについて何か読んだことがありますが、ストーリーボードを使用しているので、持っていないと思います。また、ビュー コントローラーにアタッチせずに要素を引き出す方法がわかりません (しようとしていますが、マウス ボタンを放すと、ツールがツールバーに戻ります)。 UIToolbar が必要な理由さえ理解できません。

最後に、テキストフィールドを日付ピッカーデリゲートに接続するにはどうすればよいですか?

誰かが私を助けることができますか?

アップデート:

実際、それは非常に簡単です。必要なのは次のことだけです。

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

self.birthday.inputView = datePicker;
4

3 に答える 3

54

UIResponderUITextField継承元であり、というプロパティを定義しますinputView。このプロパティ (a ) は、ファーストレスポンダーになったときにキーボードの代わりにUIView *表示されるビューを定義できます。UIResponder

したがって、textField をタップしたときに a を表示したい場合UIDatePicker(つまり、その textField をファーストレスポンダにする場合) は、素朴に次のように言えます。

UIDatePicker *datePicker = [[UIDatePicker alloc] init...];
... configure datePicker ...

[myTextField setInputView:datePicker];

これで、UITextFieldがタップUIDatePickerされると、代わりに a が表示されます。

でも

さまざまなオリエンテーションやさまざまなイディオムを処理する必要があるため、これ以上のことを行う必要があります。

でもそれが基本的な考え方です。

(そして、上にツールバーが必要な場合はUIDatePicker、それがinputAccessoryViewプロパティの目的です...)

于 2012-10-17T03:09:16.963 に答える
21

ViewController.mの viewDidLoad で

- (void)viewDidLoad {
    [super viewDidLoad];

    UIDatePicker *datePicker = [[UIDatePicker alloc]init];
    [datePicker setDate:[NSDate date]];
    datePicker.datePickerMode = UIDatePickerModeDate;
    [datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged];
    [txtFieldBranchYear setInputView:datePicker];
}

ViewController にメソッドを 1 つ追加します

-(void) dateTextField:(id)sender
{
    UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView;
    [picker setMaximumDate:[NSDate date]];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    NSDate *eventDate = picker.date;
    [dateFormat setDateFormat:@"dd/MM/yyyy"];

    NSString *dateString = [dateFormat stringFromDate:eventDate];
    txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString];
}

txtFieldBranchYear は UITextField のアウトレットです

于 2014-11-25T05:30:11.390 に答える
0

日付ピッカービューとuitoolbarviewをビューに追加します。例えば

CGFloat toolbarHeight = 44.f;
CGFloat datePickerHeight = 140.f;
CGFloat containerViewHeight = toolbarHeight+datePickerHeight;
//create container view for datepicker and toolbar
UIView *containerView = [[UIVIew alloc] initWithFrame:CGRectMake(0.f, [self.view bounds].size.height+containerViewHeight, [self.view bounds].size.width, containerViewHeight)];

//after init toolbar set the frame
toolBar.frame = CGRectMake(0.f,0.f,containerView.frame.size.width, toolbarHeight];
//then add on toolbar button save and release it after add

//after init datePicker set the frame
datePicker.frame = CGRectMake(0.f, toolbarHeight, containerView.frame.size.width, datePickerHeight);

//add datePicker and toolBar to containerView
[containerView addSubview: toolBar];
[containerView addSubview: datePicker];

[toolBar release];
[datePicker release];

//add containerView to main view

[self.view addSubview: containerView];
[containerView release];

したがって、ビューが読み込まれると、それらは非表示になります。コンテナビューのYは、ビューフレームの外側にあります。

ここで、UITextFieldDelegateのプロパティデリゲートを割り当てる必要があります

textfield.delegate = self;

textFieldDidBeginEditingを委任するメソッドでは、UITextFieldDelegateを参照して、datePickerとツールバーを表示するメソッドを起動する必要があります。選択されたものを定義するtextFieldsが多数ある場合は、整数のtagプロパティを使用し、多くのif条件の代わりにswitchを使用できます。

datePickerとツールバーを表示するには、containerViewフレームのYを変更する必要があります。これがその方法です

CGRect containerViewFrame = containerView.frame;
containerViewFrame.y -=containerViewHeight;
containerView.frame = containerViewFrame;

プラスcontainerViewHeight変数だけを非表示にします。UIViewAnimationsを使用して、アニメーションで表示できます。たとえば、UIViewAnimationCurveEaseInOut

于 2012-10-10T22:35:50.453 に答える