0

我正在使用 Kal 日历,我需要让用户能够插入一行,这完全是另一回事。

Kal Calendar 通过将其类分配给视图控制器来应用,并生成视图。

因此,我决定制作一个插入栏,用户可以在其中单击,然后将其发送到另一个视图控制器,他可以在其中插入一个值。

但为此,我需要添加一个栏,所以我在主视图控制器的容器中添加了 Kal,这样我就可以通过情节提要添加栏。

http://imageshack.us/photo/my-images/838/zahm.png/

所以,现在我需要在用户单击 + 按钮时将选定的日期转移到“插入”视图控制器。

问题是我似乎无法传递值,我尝试了一些不同的方法,但我得到了空值。

在 Kal ViewController 内部,Selected 日期打印在这里,并在 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 日历中创建插入视图的实例并在那里设置日期来做到这一点,但后来我发现如果我通过情节提要继续使用另一个实例。

关于做什么的任何建议?也许以完全不同的方式设置它..?

4

1 回答 1

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 命名了“Insert”,并为您在 ViewControllerInsert 中需要的 NSDate 属性命名了 passInDate。

于 2013-07-27T15:49:14.063 回答