[self.navigationController presentModalViewController:calander1 animated:YES];
По умолчанию ваш календарь будет отображаться снизу.Если вы хотите, чтобы он постепенно затухал, вы можете установить:
calendar1.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
или вы можете включить его, установив:
calendar1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
Вам необходимо вызвать этот установщик перед представлением контроллера видакстати.Кроме того, представление этого контроллера представления календаря модально означает, что вы должны отменить его модально, а не извлекать его из navigationController.
[self dismissModalViewControllerAnimated:YES];
Редактировать
Чтобы вернуть выбранную дату назадк вашему FormController вам нужно объявить протокол делегата внутри вашего CalendarTestViewController.h
@protocol CalendarTestViewControllerDelegate
- (void)calendarDidSelectDate:(NSDate *)selectedDate;
@end
Это говорит вашему компилятору, что делегату нужно будет реализовать метод с именем calendarDidSelectDate:
Затем вам нужноприсвойте своему CalendarTestViewController свойство делегата, также внутри .h, прямо перед последним @ end
@property (nonatomic, assign) id<CalendarTestViewControllerDelegate> delegate;
Это означает, что у вас есть свойство любого класса (это то, что обозначает id), которое соответствует объявленному вами протоколу CalendarTestViewControllerDelegateвыше, и это свойство называется делегатом.В вашем файле CalendarTestViewController.m прямо под строкой @impelementation вы должны поместить:
@synthetize delegate;
А теперь в вашем FormController.h в строке, которая говорит @interface FormController : UITableViewController
, вам нужно добавить <CalendarTestViewControllerDelegate>
, который сообщаетКомпилятор этого класса будет соответствовать этому протоколу.Теперь осталось только добавить в метод -(IBAction)cal:(id)sender
метод calendar1.delegate = self;
и реализовать метод делегата где-нибудь внутри FormController.m
- (void)calendarDidSelectDate:(NSDate *)selectedDate
{
// set the selectedDate wherever it needs to be...
}
Edit2
Youнужно заменить:
- (void)calendarView:(KLCalendarView *)calendarView tappedTile:(KLTile *)aTile{
// NSLog(@"Date Selected is %@",[aTile date]);
if (cat==nil) {
cat=[[FormController alloc]initWithNibName:nil bundle:nil];
NSString *st=[[NSString alloc] initWithFormat:@"%@",[aTile date]];
cat.mas=st;
// [self.navigationController pushViewController:cat animated:YES];
//[cat release];
[self dismissModalViewControllerAnimated:YES];
}
на что-то вроде:
- (void)calendarView:(KLCalendarView *)calendarView tappedTile:(KLTile *)aTile
{
[self.delegate calendarDidSelectDate:[aTile date]];
[self dismissModalViewControllerAnimated:YES];
}
и:
- (void)calendarDidSelectDate:(NSDate *)selectedDate
{
cali.text=mas;
// set the selectedDate wherever it needs to be...
}
на:
- (void)calendarDidSelectDate:(NSDate *)selectedDate
{
cali.text = [NSString stringWithFormat:@"%@", selectedDate];
}