自定义EKEventViewController

时间:2012-09-19 02:26:19

标签: ios subclassing

我看过这个应用程序似乎是在自定义EKEventViewController。看起来它正在修改EKEventViewController中的tableview并向其追加行。它绝对不仅仅是一个前面的视图 - 它实际上在tableview中

custom EKEventViewController

有任何想法如何做到这一点?可以通过子类化EKEventViewController来完成吗? 我已经尝试了子类化 - 但无法弄清楚如何将numberofRowsInSection推送到超类。

似乎我应该能够子类化EKEventViewController并覆盖像这样的UITableView委托函数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [super tableView:tableView numberOfRowsInSection:section];
}

但是因为EKEventViewController不从UITableViewContoller继承(它是一个UIViewController) - 这段代码不会编译。

1 个答案:

答案 0 :(得分:2)

通过

计算出来

子类EKEventViewController 然后在那个类viewDidAppear 在tableview中增加scrollview的vertical contentSize 在最后一行结束后添加我的小视图控制器

+(void) viewDidAppear:(BOOL)animated
    {
    if ([self.event.location length]>0)
    {
            UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];
        _mev = (MapEventView*)[mainStoryboard instantiateViewControllerWithIdentifier: @"MAP_EVENT_VIEW"];

        UITableView* tv=[self getEKEventTableView];
        //tv.showsVerticalScrollIndicator=YES;
        tv.contentSize=CGSizeMake(tv.contentSize.width, tv.contentSize.height+MAP_EVENT_VIEW_PADDING+_mev.view.frame.size.height);

        // get last row in last sectoin
        int lastSection=[tv numberOfSections]-1;
        int lastRow=[tv numberOfRowsInSection:lastSection]-1;
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:lastRow inSection:lastSection];
        UITableViewCell* cell=[tv cellForRowAtIndexPath:indexPath];

        float mapeventview_origin=cell.frame.origin.y+cell.frame.size.height;

        TGLog(@"%d,%d %f %f", lastSection, lastRow, cell.frame.origin.y, mapeventview_origin);
        TGLog(@"event %@ location %@", self.event.title, self.event.location);
        _mev.ewc=[[EKEventWithCoords alloc] init];
        _mev.ewc.event=self.event;

        [tv addSubview:_mev.view];
        [_mev.view setCenter:CGPointMake(_mev.view.center.x, _mev.view.center.y+mapeventview_origin)];
    }
}