创建自定义日历表iOS的一些问题

时间:2012-01-28 12:39:48

标签: iphone ios xcode ipad sdk

我为我的日历应用程序创建了一个自定义日历...但我有一些问题,如果你帮我这样做,我将不胜感激,这段代码显示了一天。 例如第2天,第4天,第13天,第24天

- (NSString *) showPersianDay {

    NSCalendar *persCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSPersianCalendar];    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSLocale *IRLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"fa_IR"];
    [dateFormatter setLocale:IRLocal];
    [dateFormatter setCalendar:persCalendar];

    offsetComponents = [[NSDateComponents alloc] init];
    offsetComponents.day = _dayNumber;

    NSDate *nextDate = [persCalendar dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];

    [dateFormatter setDateFormat:@"d"];
    NSString *currDay = [dateFormatter stringFromDate:nextDate];

    [NSString stringWithFormat:@"%@",currDay];

    [persCalendar release];
    [dateFormatter release];

    return currDay;
}

我创建了一个月的自定义表格,显示了一个月的日期,因此当用户点按此数字时,我的日期应根据数字而变化,

enter image description here

例如今天是1月4日 - 当用户点击6 Jan时,我的日期应该更改为1月6日。

我不必使用某种方式:day.text = @"6"或其他......我需要返回一个真正的DATE,如何修改我的代码以显示特定日期? 谢谢。

1 个答案:

答案 0 :(得分:1)

也许你应该让类返回带有多个键的NSDictionary。一个键可以包含日期编号的字符串值,另一个键可以包含日期对象。

- (NSDictionary *) showPersianDay {

    NSCalendar *persCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSPersianCalendar];    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSLocale *IRLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"fa_IR"];
    [dateFormatter setLocale:IRLocal];
    [dateFormatter setCalendar:persCalendar];

    offsetComponents = [[NSDateComponents alloc] init];
    offsetComponents.day = _dayNumber;

    NSDate *nextDate = [persCalendar dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];

    [dateFormatter setDateFormat:@"d"];
    NSString *currDay = [dateFormatter stringFromDate:nextDate];

    [NSString stringWithFormat:@"%@",currDay];
    NSDictionary *results = [NSDictionary dictionaryWithObjectsAndKeys:currDay,@"dateString",nextDate,@"DateObj" nil];

    return results;
}

然后在另一侧,您可以显示dateString并将DateObj缓存在日历单元格中。希望这能解决你的问题。