0

有人可以概述一下这条线到底是做什么的吗?

    [self.delegate calendar:self didSelectDate:self.selectedDate];

该行基本上用于在另一个类中的标签 dateLabel 上设置日期。

    CKCalendarView *calendar = [[CKCalendarView alloc] initWithStartDay:startMonday];
    calendar.delegate = self;

    self.dateFormatter = [[NSDateFormatter alloc] init];
    [self.dateFormatter setDateFormat:@"dd/MM/yyyy"];
    calendar.selectedDate = [self.dateFormatter dateFromString:@"18/11/2012"];
    calendar.minimumDate = [self.dateFormatter dateFromString:@"09/11/2012"];
    calendar.maximumDate = [self.dateFormatter dateFromString:@"29/11/2012"];

    calendar.frame = CGRectMake(10, 10, 300, 320);
    [self.view addSubview:calendar];

    self.dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(calendar.frame) + 4, self.view.bounds.size.width, 24)];
    [self.view addSubview:self.dateLabel];

关于上述行的作用的“夫妇行”详细解释将有很大帮助。

4

1 回答 1

2

简而言之,您的日历有一个CKCalendar对象的实例,一个看起来是其中一个类的子类的视图UIView(我假设,因为我们无法分辨,因为您没有包含 .h 文件或完整的代码您正在使用的这个 .m 文件)。

大多数从 UIView 派生的类都需要一个委托来处理用户界面中的行为以及由用户界面生成的行为。(有关委托的功能的详细描述,请参阅委托如何在 Objective-C 中工作?)。请注意,您在实例化后立即明确设置委托calendar

calendar.delegate = self

因此,通过该行,您使此类既是显示类又是委托类,因此您的类需要实现协议所需的任何方法(其中一个看起来是 -(void)calendar:didSelectDate:.)

您引用的代码行(基本上)说“使用-(void)calendar:didSelectDate:委托中找到的方法并将其自身和selectedDate作为该方法的参数/参数传递。”。

我会把那行写成:

[[self delegate] calendar:self didSelectDate:[self selectedDate]];

希望有帮助。

于 2012-11-18T13:12:12.667 回答