0

クライアントは、1 つのコンポーネントのみを選択できる UIDatePicker を希望しています。したがって、クライアントは、日/月と年のオプションを個別に指定する代わりに、完全な日付 (つまり、2013 年 5 月 3 日) を選択するオプションのみを必要とします。

nsdateformatter からのデータソースを持つカスタム ピッカービューを作成する必要がありますか、それともネイティブの UIDatePicker を使用して 1 つのコンポーネントのみを表示できますか?

編集:

いくつかの調査の後、私は次の実装に行き着きました。最初に開始日と終了日を設定した場所。その後、開始日から終了日までのすべての日を反復処理し、それらを可変配列に保存しています。

int numberOfDaysToThePast = 356;
    NSDate * startDate = [NSDate date];
    NSDate * endDate = [NSDate date];
    startDate = [startDate addTimeInterval:-(24 * 60 * 60* numberOfDaysToThePast)];

    dateArray = [[NSMutableArray alloc] init];
    for (NSDate *date = [startDate copy]; [date compare: endDate] < 0;
        date = [date dateByAddingTimeInterval:24 * 60 * 60] ) {
        NSString* dateString = [formatter stringFromDate:date];
       [dateArray addObject:dateString];

    }

//add custom picker
    pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
    pickerView.delegate = self;
    pickerView.dataSource = self;
    [self.view addSubview:pickerView];
4

1 に答える 1

2

私は小さなコード スニペットを持っていますが、それは 1 年間のビューで、いくつかの小さな変更を加えることができ、それで問題ありません

1960 年以降のすべての年の配列を作成する Objective-C コード。UIPicker への入力に最適

//Get Current Year into i2
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init]autorelease];
[formatter setDateFormat:@"yyyy"];
int i2  = [[formatter stringFromDate:[NSDate date]] intValue];


//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
[years addObject:[NSString stringWithFormat:@"%d",i]];
}

UIPickerView デリゲートの応答

- (NSInteger)numberOfComponentsInPickerView: (UIPickerView*)thePickerView {
return 1;
}

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component
{
return [years count];
}
- (NSString *)pickerView:(UIPickerView *)thePickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [years objectAtIndex:row];

インターフェイスでの宣言を忘れないでください

//Data
NSMutableArray *years;

問題が幸運とHFのどこにあるのか教えていただけない場合は、お役に立てば幸いです

于 2013-03-05T13:56:32.063 に答える