El caso es que lo que he hecho es crearme unas variables que definen:
- ancho de la casilla de día
- alto de la casilla de día
- número de día de la semana en el que hay que empezar (0 para el
lunes, ..., 6 para el viernes)
- número de la semana en la que hay que empezar (de 0 a 4, porque 31
días pueden extenderse como mucho en 5 semanas)
- número de días que tiene el mes.
Con eso, hago un for que genera UILabels posicionadas mientras le
quedan días al mes (matemáticas...).
La parte "curiosa" de la personalización del label sería (parto de
UILabel * label):
label.backgroundColor = [UIColor white];
label.text = [NSString stringWithForma;@"%d", i]; // La i del for...
que va de 1 a la duración del mes...
label.textAlignment = UITextAlignmentCenter;
// Necesitas haber hecho #import <QuartzCore/QuartzCore.h>
label.layer.borderColor = [UIColor grayColor].CGColor;
label.layer.borderWith = 1.0;
Cada bucle hace un [self.view addSubview: label] y un [label release]
Con eso puedes comenzar a posicionar los Labels donde tocan. Falta la
parte del código que te calcula los aspectos temporales.
Necesitaremos:
- El día en el que estás
- El mes en el que estás
- Los días que tiene el mes
- Si el mes empieza en Lunes, martes, etc...
Si es un calendario fijo, puedes fijar esos parámetros para cada
vista. Si no, toca calcular. Me huele que es con NSDate pero no tengo
ahora mismo fresquitos los métodos exáctos. A ver si lo puedo revisar.
:D
--
"Tengo artículos prohibidos de lugares
en los que el hombre no osa aventurarse.
También tengo yogur helado,
al que llamo Yogurlado."
- (void)viewDidLoad {
weekHeight = 42;
dayWidth = 42;
monthAreaOrigin = CGPointMake((320-dayWidth*7)/2, 60);
UILabel * temp;
int weekDay = 0; // 0 to 6
int monthWeek = 0; // 0 to 4
int monthDays = 31;
for (int i = 1; i<=monthDays; i++) {
temp = [[UILabel alloc] initWithFrame:CGRectMake(monthAreaOrigin.x + dayWidth * weekDay, monthAreaOrigin.y + monthWeek * weekHeight, dayWidth, weekHeight)];
[temp setBackgroundColor:[UIColor whiteColor]];
[temp setText:[NSString stringWithFormat:@"%d", i]];
[temp setTextAlignment:UITextAlignmentCenter];
// Esta parte requiere un #import <QuartzCore/QuartzCore.h>
temp.layer.borderColor = [UIColor grayColor].CGColor;
temp.layer.borderWidth = 1.0;
[self.view addSubview:temp];
[temp release];
weekDay++;
if (weekDay > 6)
{
weekDay = 0;
monthWeek++;
}
}
[super viewDidLoad];
}
NSDate *currentDate = [NSDate date];
NSLog(@"%@", currentDate);
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setFirstWeekday:1];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit;
NSDateComponents *currentDayComponents = [calendar components:unitFlags fromDate:currentDate];
NSLog(@"%d/%d/%d (%d/%d)",[currentDayComponents day],[currentDayComponents month],[currentDayComponents year],[currentDayComponents weekday],[currentDayComponents weekdayOrdinal]);
NSDateComponents *modifier = [[NSDateComponents alloc] init];
[modifier setDay:-[currentDayComponents day]+1];
NSDate *firstDayOfCurrentMonth = [calendar dateByAddingComponents:modifier toDate:currentDate options:0];
NSDateComponents * firstDayOfCurrentMonthComponents = [calendar components:unitFlags fromDate:firstDayOfCurrentMonth];
NSLog(@"%d/%d/%d (%d/%d)",[firstDayOfCurrentMonthComponents day],[firstDayOfCurrentMonthComponents month],[firstDayOfCurrentMonthComponents year],[firstDayOfCurrentMonthComponents weekday],[firstDayOfCurrentMonthComponents weekdayOrdinal]);