0

そこで、数週間前に、UIDatePicker で日付の特定の範囲を単にグレー表示にするのではなく、実際にロックする方法についてのヒントを求めました。うまくいきました。しかし、今、私は同様の状況に達し、それを機能させることができません。これで、日付の最小値と最大値が決まりました。つまり、日付の間隔が短い (または許可されない) だけを許可したいということです。

これが私がやろうとしていることです:(日付ピッカーにターゲットを追加しました)

-(void) disableDate {
if ([datePicker.date compare:[NSDate date]] == NSOrderedDescending || [datePicker.date compare:datePicker.minimumDate] == NSOrderedAscending) {
    datePicker.date = [NSDate date];
    [datePicker reloadInputViews];
}

}

いくつかのメモ: 1) 日付ピッカーの日付を初めて変更したときにのみ機能します。2回目以降は機能しなくなります.datepickerは現在の日付にスクロールバックしません。2) 注 1) は、disableDate が呼び出されているため、何らかの理由で発生していますが、設定した条件が満たされないように、アプリは「if」に入ることはありません。

言い換えれば、if ステートメントに入らないため、一度スクロールする理由がわかりません。また、if ステートメントに入らない理由もわかりません。

ここに何かアイデアはありますか?

前もって感謝します!

編集: minimum.date と maximum.date が設定されています。

4

2 に答える 2

2

ユーザーが範囲なしで日付を選択できないようにしたい場合は、これを使用します。

UIDatePicker *datePicker = [[UIDatePicker alloc] init];
    datePicker.datePickerMode = UIDatePickerModeDate;

    datePicker.minimumDate=_minDate;
    datePicker.maximumDate=_maxDate;

_minDate と _maxDate が定義されている場所:

NSDateComponents* components=[[NSDateComponents alloc] init];

    [components setYear:1900];

    _minDate=[[NSCalendar currentCalendar] dateFromComponents:components];
    _maxDate=[NSDate date];

そしてビンゴ、制限が定義されています。

これがお役に立てば幸いです。

于 2013-10-02T18:47:07.613 に答える
1

わかりました、それで私は最終的にそれを解決しました。他の誰かがこの奇妙な日付ピッカーの動作に苦労した場合に備えて、私が行った方法をここに投稿します。

したがって、ここで起こっていることは、最大日付と最小日付のプロパティも日付を制限範囲内にロックするということです。しかし、彼らは日付ピッカービューを更新せずにそれを行います。さらに、日付ピッカーはその値が実際に変更される前にそれを行うため、アプリが disableDate メソッド内の if に到達すると、その日付はすでに現在の日付 (または最も近い日付など - しかし有効な日付) に設定されており、if はスキップされます。

それを解決するために、次のように setDate:animated: を冗長な方法で使用することを考えました。

[myDatePicker setDate:myDatePicker.date animated: YES]

しかし、datepicker は何もしないので、datepicker.date に 1 秒を加えた NSDate を作成し、新しい日付を設定しました。言い換えると:

- (void) disableDate {
NSDate * oneSecondAfterPickersDate = [datePicker.date dateByAddingTimeInterval:1] ;
if ( [datePicker.date compare:datePicker.minimumDate] == NSOrderedSame ) {
    datePicker.date = oneSecondAfterPickersDate ;
}
else if ( [datePicker.date compare:datePicker.maximumDate] == NSOrderedSame ) {
    datePicker.date = oneSecondAfterPickersDate ;
}
}

それが誰かを助けることを願っています:)

編集: 言及するのを忘れた - > メソッドをトリガーするために UIControlEventValueChanged を使用しています。

于 2013-10-03T21:29:43.557 に答える