我已经从UITableView创建了一个派生类,它将包含一些自定义逻辑。但我不知道如何让它填充细胞。
小时。文件:
@interface MetricsView : UITableView {
@private
NSMutableArray *_items;
}
@end
米。文件:
@implementation MetricsView
//this gets called
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
_items = [[NSMutableArray alloc]initWithObjects:@"Name:", nil];
}
return self;
}
//this never gets called??
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
//this never gets called??
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_items count];
}
//this never gets called??
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = @"MetricsViewCell";
MetricsViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
[cell setupWithName:[_items objectAtIndex:0] withData:[_items objectAtIndex:0]];
return cell;
}
@end
我在ViewController上创建了MetricsView。这是故事板的样子:
我是否需要在ViewController.m中添加一些自定义初始化代码?
感谢。
答案 0 :(得分:1)
//this never gets called??
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
那和其他方法是数据源方法。除非您将此类设置为表视图的数据源,否则不会调用它们。
奇怪的是,您已将此代码放在UITableView子类本身中。好吧,这很奇怪,它违反了MVC,但如果你真的想要,你就可以做到。但是,您必须将UITableView子类设置为自己的数据源(并且可能是它自己的委托)。这本身不会发生;你必须这样做。
LATER EDIT:但是,总的来说,我会首先怀疑子类化UITableView的必要性和可取性。我很难想到这样做有用的情况。只需将您的表视图放在界面中,将其delegate
和datasource
出口挂钩到View Controller,就可以了。现在视图控制器获得numberOfSectionsInTableView:
和其他调用,正确它应该。
答案 1 :(得分:1)
好吧,让我们把事情做好。您的UITableView
是视图。你确实可以将它子类化,但它似乎不是你想要的。我觉得您要做的是创建自定义UITableView
delegate
和dataSource
。这意味着一个符合这两个协议的自定义类。您不需要为UITableView创建子类,但需要将自定义类设置为UITableView
的委托。在这个类中,您将能够实现您尝试实现的方法(-cell用于索引路径的行,-number of section in section,-number of section)。你需要的是将你的tableview获取水的井子类化(水是关于放入细胞的内容以及要创建的细胞数量的信息)。我希望这会有所帮助!