我正在使用Kal Calendar,我需要让用户能够插入一行,这就是另一个故事。
Kal Calendar通过将其类分配给视图控制器来应用,并生成视图。
所以,我决定制作一个插入栏,用户可以点击,然后发送到另一个视图控制器,在那里他可以插入一个值。
但为此,我需要添加一个栏,所以我在主视图控制器的容器中添加了Kal,所以我可以通过故事板添加栏。
http://imageshack.us/photo/my-images/838/zahm.png/
所以,现在我需要在用户点击+按钮时将所选日期转到“插入”视图控制器。
问题是我似乎无法传递该值,我尝试了一些不同的方法,并且我得到了null。
在Kal ViewController中,选择日期在此处打印,并在ViewDidLoad上触发,因此可以设置它的保护。
- (void) calendarMonthView:(TKCalendarMonthView*)monthView didSelectDate:(NSDate*)date{
NSLog(@"Date Selected: %@",date);
self.dateSelected = date; // i set it for the property here
[self.tableView reloadData];
}
所以,我尝试通过在Kal日历中创建插入视图的实例并在那里设置日期来做到这一点,但我发现如果我通过故事板进行搜索,则会使用另一个实例。
有关该怎么做的任何建议?也许以完全不同的方式设置它。?
随意询问细节,我将详细说明
答案 0 :(得分:1)
使用容器视图获得的控制器是子视图控制器,因此您可以使用self.childViewControllers [0]从父级(其视图中包含容器视图的控制器)引用它。在您的情况下,看起来ViewControllerCalendar是父级,CalendarMonthViewController是子级,其中您具有dateSelected属性。如果ViewControllerInsert的模态segue来自+按钮,那么你应该能够将日期传递给prepareForSegue:sender中的那个控制器:就像这样(这段代码将在你的容器控制器中,ViewControllerCalendar):
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"Insert"]) {
ViewControllerInsert *dest = segue.destinationViewController;
dest.passedInDate = [(CalendarMonthViewController *)self.childViewControllers[0] dateSelected];
}
}
在我的示例中,我为segue创建了一个名称,“插入”,以及在ViewControllerInsert中需要的NSDate属性名称passedInDate。