1

私は iOS 開発 (Android 開発から来ました) に不慣れで、助けが必要です。Vurig のライブラリを使用して、カスタム カレンダー コントロールを表示し、カレンダーに複数の日付をマークしています。

問題は、グレゴリオ暦ではなくイスラム暦の日付をマークしたいということです。どうやってやるの?

これまでのところ、カレンダーの日付をマークするためにイスラム暦の日付をグレゴリオ暦に変換しましたが、カレンダーの月に複数の日付をマークしたいのに対し、それは 1 つの日付のみをマークします。

これまでのコード:

-(void)calendarView:(VRGCalendarView *)calendarView switchedToMonth:(int)month targetHeight:(float)targetHeight animated:(BOOL)animated {
    NSArray *dates;


    NSDate *date = [self addDates:calendarView andDay:6 andMonth:10];

//    if (month==8){
//       dates = [NSArray arrayWithObjects:[NSNumber numberWithInt:5],[NSNumber numberWithInt:25], nil];
//    }
//    if (month==9) {
//       dates = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:5], nil];
//       
//    }

    //if (month==[[NSDate date] month]) {

    NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:( NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSWeekCalendarUnit) fromDate:date];

    int gmonth = [dateComponents month];
    if (month == gmonth) {
        dates = [NSArray arrayWithObjects:date, nil];
    }

    [calendarView markDates:dates];


}

-(void)calendarView:(VRGCalendarView *)calendarView dateSelected:(NSDate *)date {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; [dateFormatter setDateFormat:@"dd MMMM"];

    NSLog(@"Selected date = %@",[dateFormatter stringFromDate:date]);

    //NSLog(@"Selected date = %@",date);
}


-(NSDate *)addDates:(VRGCalendarView *)calendarView andDay:(int)day andMonth:(int)month{
    // Then create an Islamic calendar
    NSCalendar *hijriCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCalendar];

    // And grab those date components for the same date
    NSDateComponents *hijriComponents = [[NSDateComponents alloc] init];

    hijriComponents.day = day;
    hijriComponents.month = month;
    hijriComponents.year = 1434;

    NSDate *hdate = [hijriCalendar dateFromComponents:hijriComponents];


    // Create a Gregorian Calendar
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    // Set up components of a Gregorian date
    NSDateComponents *gregorianComponents = [gregorianCalendar components:(NSDayCalendarUnit |
                                                                           NSMonthCalendarUnit |
                                                                           NSYearCalendarUnit)
                                                                 fromDate:hdate];
    // Create the date
    NSDate *date = [gregorianCalendar dateFromComponents:gregorianComponents];

    NSLog(@"[In Hijri calendar ->] Date is %@", date);
    return date;

}
4

1 に答える 1

1

NSDateメソッドにs の配列を渡すだけですmarkDates:NSDateは単なるタイム スタンプであり、カレンダーやタイム ゾーンなどとは無関係であるため、最初にグレゴリオ暦に変換する必要はありません。

私は VURIG Calendar サンプル プロジェクトをダウンロードしVRGViewController、メソッドを次のように置き換えましたcalendarView:switchedToMonth:targetHeight:animated:。これは、必要なものを正確に示しているはずです。

-(void)calendarView:(VRGCalendarView *)calendarView switchedToMonth:(int)month targetHeight:(float)targetHeight animated:(BOOL)animated {
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCalendar];
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:6];
    [components setMonth:10];
    [components setYear:1434];
    NSDate *date1 = [calendar dateFromComponents:components];

    [components setDay:10];
    NSDate *date2 = [calendar dateFromComponents:components];

    [calendarView markDates:@[date1,date2]];
}

これはカレンダー上で 8 月 12 日と 8 月 16 日をマークしました。私はヒジュラ暦に詳しくありませんが、正確であると言えます。

于 2013-08-14T20:26:06.920 に答える