在拦截对UITableViewDelegate方法的调用后,UITableViewCells不会显示在屏幕上

时间:2014-04-28 04:23:17

标签: ios uitableview

在玩iOS 7.1 SDK(在XCode 5.1.1上)时,我试图通过创建一个实现UITableViewController和{的类来拦截对UITableViewDelegate的委托方法的调用。 {1}}协议。我希望tableView将调用委托给UITableViewDataSource进行一些自定义并委托回MyTableViewDelegate

通过调试,我找到了HomeViewController方法和tableView:cellForRowAtIndexPath:的{​​{1}},我的自定义tableView:willDisplayCell:forRowAtIndexPath:类的HomeViewController方法被调用,以及单元格有正确的内容。 **所以在我看来,细胞被吸引到某个地方。但只是没有在屏幕上显示(虽然表格行分隔线显示在屏幕上)。**我想知道是否有人知道它为什么不起作用。以下是代码段。提前感谢您的见解。

HomeViewController.h

drawRect:

HomeViewController.m

UITableViewCell

MyTableViewDelegate.h

// HomeViewController.h
@interface HomeViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    UITableViewController *tableViewController;
    UITableView *tableView;
}

@property(nonatomic, strong) MyTableViewDelegate *myDelegate;

@end

MyTableViewDelegate.m

// HomeViewController.m
- (void)loadView {
    [super loadView];

    tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
    [self addChildViewController:tableViewController];
    [tableViewController didMoveToParentViewController:self];

    myDelegate = [[MyTableViewDelegate alloc] init];
    [myDelegate setDelegate:self];

    tableView = [[tableViewController tableView] retain];
    [tableView setFrame:[[self view] bounds]];
    [tableView setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];

    [tableView setDelegate:myDelegate];
    [tableView setDataSource:myDelegate];

    [tableView setClipsToBounds:NO];
    [[self view] addSubview:tableView];
}

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyEntry *entry = [self entryAtIndexPath:indexPath];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellClass"];
    if (cell == nil) cell = [[[cellClass alloc] initWithReuseIdentifier:@"cellClass"] autorelease];

    [self configureCell:cell forEntry:entry];

    return cell;
}

编辑: 如果我将tableView的delegate和dataSource设置为HomeViewController实例而不是MyTableViewDelegate实例,它可以正常工作。

// MyTableViewDelegate.h   

@interface MyTableViewDelegate : NSObject <UITableViewDelegate, UITableViewDataSource> {
}

@property (nonatomic, assign)   id delegate;

@end

EDITED : 通常我们可以在HomeViewController中完成所有工作。但是,在我的情况下,我试图看看是否可以在HomeViewController和tableView之间插入一个层。我有一个特殊的用例,我希望HomeViewController无法覆盖在MyTableViewDelegate中实现的自定义(旨在成为一个库)。因此,将MyTableViewDelegate实现为基类并使HomeViewController从中派生出来并不是一个好主意。

据我所知,HomeViewController和tableView之间唯一的连接是tableView由HomeViewController作为subView进行管理,tableViewController也是HomeViewController的childViewController。由于MyTableViewDelegate会将每个方法调用委托给HomeViewController,因此附加层(即MyTableViewDelegate)是否会破坏此连接?如果是这样,它如何打破?同样,没有MyTableViewDelegate层,上面的代码就可以了。

0 个答案:

没有答案