6

iOSアプリで日付ピッカーを使用していますが、何日かブロックできるかどうか知りたいです。たとえば、1年のすべての月曜日をブロックする必要がありますが、これは可能ですか?

ありがとう。

4

3 に答える 3

4

コメントで説明されているようにカスタムUIPickerViewを追加するか、ここでUIControlEventValueChanged説明されているようにイベントに対して呼び出されるメソッドを実装するだけです。

次に、有効な平日の新しい値を確認します。あなたは次のように平日を得ることができます:

NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
return [components weekday]; // 1 = Sunday, 2 = Monday, ...

スクロールホイールで何日か隠す方法はありません。

于 2012-08-31T06:39:44.953 に答える
3

この質問に対するSwift4の回答は次のとおりです(Nicholas Harlenによる元の回答

let datePicker: UIDatePicker = UIDatePicker(frame: .zero)
    datePicker.datePickerMode = .date
    datePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)

@objc func datePickerValueChanged(_ sender: UIDatePicker) {
    let calender: Calendar = Calendar(identifier: .gregorian)
    let weekday = calender.component(.weekday, from: sender.date)
    //sunday
    if weekday == 1 {
        datePicker.setDate(Date(timeInterval: 60*60*24*1, since: sender.date), animated: true)
    } else if weekday == 7 {
        datePicker.setDate(Date(timeInterval: 60*60*24*(-1), since: sender.date), animated: true)
    }
}
于 2018-11-29T08:14:00.683 に答える
0

私は似たようなことをしなければならず、日付を削除する方法を見つけることができませんでした。しかし、私がやったことは、無効な日付が選択された場合、最小の日付を設定してその前の日付を選択しようとした場合のコントロールの処理と同様に、有効な最も近い日に跳ね返ることでした。

-(void)init
{
    datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
    [datePicker setDatePickerMode:UIDatePickerModeDate];
    [datePicker setMinimumDate: [NSDate date]];
    [datePicker addTarget:self action:@selector(onDatePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
}

-(void)onDatePickerValueChanged:(UIDatePicker *)picker
{
    // Work out which day of the week is currently selected.
    NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:picker.date];
    int weekday = [comps weekday];

    // Bounce Sundays (weekday=1) forward a day
    if (weekday == 1)
    {
        [datePicker setDate:[NSDate dateWithTimeInterval:60*60*24*1 sinceDate:picker.date] animated: true];
    }
    // Bounce Saturdays (weekday=7) back a day
    else if (weekday == 7)
    {
        [datePicker setDate:[NSDate dateWithTimeInterval:60*60*24*-1 sinceDate:picker.date] animated: true];
    }
}
于 2015-01-23T01:38:52.797 に答える