在玩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层,上面的代码就可以了。