带自定义类的UITableView

时间:2013-05-07 20:23:00

标签: objective-c xcode

我已经从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。这是故事板的样子:

Here's what storyboard looks like:

我是否需要在ViewController.m中添加一些自定义初始化代码?

感谢。

2 个答案:

答案 0 :(得分:1)

//this never gets called??
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

那和其他方法是数据源方法。除非您将此类设置为表视图的数据源,否则不会调用它们。

奇怪的是,您已将此代码放在UITableView子类本身中。好吧,这很奇怪,它违反了MVC,但如果你真的想要,你就可以做到。但是,您必须将UITableView子类设置为自己的数据源(并且可能是它自己的委托)。这本身不会发生;你必须这样做。

LATER EDIT:但是,总的来说,我会首先怀疑子类化UITableView的必要性和可取性。我很难想到这样做有用的情况。只需将您的表视图放在界面中,将其delegatedatasource出口挂钩到View Controller,就可以了。现在视图控制器获得numberOfSectionsInTableView:和其他调用,正确它应该。

答案 1 :(得分:1)

好吧,让我们把事情做好。您的UITableView是视图。你确实可以将它子类化,但它似乎不是你想要的。我觉得您要做的是创建自定义UITableView delegatedataSource。这意味着一个符合这两个协议的自定义类。您不需要为UITableView创建子类,但需要将自定义类设置为UITableView的委托。在这个类中,您将能够实现您尝试实现的方法(-cell用于索引路径的行,-number of section in section,-number of section)。你需要的是将你的tableview获取水的井子类化(水是关于放入细胞的内容以及要创建的细胞数量的信息)。我希望这会有所帮助!