4

ビューに日付ピッカーがありますが、年ではなく日と月のみを表示したいのですが、年を取り出す方法はありますか?

4

5 に答える 5

11

他の人が指摘しているように、独自のピッカーを作成するためにあなたは放っておかれますが、実際にはこれは難しくありません。簡単なプロトタイプです。最初のコンポーネントを数日間、2 番目のコンポーネントを数年間使用していることに注意してください。これは、実際のアプリのロケールに従って作成する必要があります。

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

-(NSInteger)pickerView:pickerView numberOfRowsInComponent:(NSInteger)component
{
    NSUInteger number = 0;
    if (component == 1) {
        number = 12;
    } else {

        NSDateComponents *comps = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];

        NSUInteger month = [pickerView selectedRowInComponent:1]+1 ;
        NSUInteger actualYear = [comps year];

        NSDateComponents *selectMothComps = [[NSDateComponents alloc] init];
        selectMothComps.year = actualYear;
        selectMothComps.month = month;
        selectMothComps.day = 1;

        NSDateComponents *nextMothComps = [[NSDateComponents alloc] init];
        nextMothComps.year = actualYear;
        nextMothComps.month = month+1;
        nextMothComps.day = 1;

        NSDate *thisMonthDate = [[NSCalendar currentCalendar] dateFromComponents:selectMothComps];
        NSDate *nextMonthDate = [[NSCalendar currentCalendar] dateFromComponents:nextMothComps];

        NSDateComponents *differnce = [[NSCalendar currentCalendar]  components:NSDayCalendarUnit
                                                   fromDate:thisMonthDate
                                                     toDate:nextMonthDate
                                                    options:0];

        number = [differnce day];

    }

    return number;
}

-(void)pickerView:pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if (component == 1) {
        [pickerView reloadComponent:0];
    }
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"%d", row+1];
}

サンプルコードはGitHubにあります


GitHub にあるバージョンは、最も優先される言語の月名を認識しています

ここに画像の説明を入力

于 2012-11-01T02:28:06.587 に答える
1

GitHub でこのプロジェクトを見つけました: PMEDatePicker

于 2014-01-17T19:57:42.750 に答える
0

オスカーの答えを拡張するには、実際に UIPickerView を使用する必要があります。

ただし、それは 365 日コーディングするという意味ではありません。必要なものは次のとおりです。

  • 12項目(月)のコンポーネント(ホイール)が侵害されました
  • 31 アイテム (日) の侵害されたコンポーネント

アイテムが選択されると、デリゲート オブジェクトへのインデックスを受け取ります。ここでは、そのインデックスがどのアイテムであるかを理解する必要があります。

その月については、キー/値スタイルのメカニズムを使用してこれを達成できます。または単にコンポーネント/ホイールの値と一致する値を持つ配列によって。とにかくホイールのデータ ソースが必要であることを思い出してください。そのデータ ソースで検索するだけです。おそらく配列です。

日に関しては、アイテムのインデックスを取得します。アイテム (日) は 1 から始まるため、インデックス値から 1 を引くだけで、ユーザーが選択した実際の日を見つけることができます。(配列のインデックス付けを補うために 1 を削除)

selectedRowInComponent は、理解を深めるために注目すべきメソッドです。

ただし、将来、同じオブジェクトを大量に作成する必要があるのではないかと心配になった場合は、Factory パターンを確認し、何らかの形で反復して Factory メソッドを呼び出すことをお勧めします。これはあなたの質問とは直接関係ありませんが、上記のコメントには確かに関連しています!

お役に立てれば!

于 2012-11-01T01:29:34.990 に答える
0

私の知る限り、UIDatePicker はこれを行うことができません。そのために UIPickerView を使用できます。

于 2012-11-01T01:07:32.193 に答える