【问题标题】:How can I implement a UIDatepicker with just one component showing each day?如何实现一个每天只显示一个组件的 UIDatepicker?
【发布时间】:2013-03-05 13:44:17
【问题描述】:

客户希望有一个UIDatePicker,其中只有一个组件是可选的。因此,与其有单独的日/月和年选项,客户只希望选择一个完整的日期(即 05-03-2013)

我是否需要为此构建一个自定义选择器视图,它的数据源来自 nsdateformatter,或者我可以使用本机 UIDatePicker 并且只显示 1 个组件?

编辑:

经过一些研究,我最终得到了以下实现。我第一次设置开始和结束日期的地方。后记我会遍历 start 和 enddate 之间的所有日子,并将它们保存在一个可变数组中。

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];

【问题讨论】:

  • 这样问不是个好问题......如果你试图满足客户的要求,100% 的应用程序应该像“有一个单独的日/月和年选项”......那你会很头疼的……
  • 您说的没错,但是作为一家企业,我们希望满足每位客户的需求。所以带来痛苦;)

标签: iphone ios date datepicker components


【解决方案1】:

我有一个小代码sn-p,但它的一年视图你可以做一些小改动,它会ok

Objective-C 代码用于创建自 1960 年以来所有年份的数组。非常适合输入到 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;

如果不让我知道问题出在哪里,希望我能帮助你,祝你好运和高频

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-26
    • 2014-02-21
    • 2012-12-02
    相关资源
    最近更新 更多