2013-05-07 77 views
0

我已经从UITableView创建了一个派生类,它将包含一些自定义逻辑。但我不知道如何让它填充单元格。 h。UITableView与自定义类

h。文件:

@interface MetricsView : UITableView { 
    @private 
    NSMutableArray *_items; 
} 
@end 

m。文件:

@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一些自定义的初始化代码?

谢谢。

回答

1

那么让我们把事情弄直。您的UITableView是视图。你的确可以继承它,但它似乎并不是你想要的。我觉得你想要做的是创建你自定义的UITableViewdelegatedataSource。意味着遵守这两个协议的自定义类。你不需要继承你的UITableView,但你需要设置你的自定义类作为你的代理UITableView。并且在这个类中,您将能够实现您尝试实现的方法(在索引路径中为行打开,在部分中行的数量,部分的数量)。你需要的是将你的tableview获取水的井(水是关于放入池中的信息以及要创建多少个池的信息)进行子类化。我希望这个能帮上忙!

+0

我想我现在明白了,谢谢。 – 2013-05-07 21:38:31

+0

所以现在我收到“的malloc:***错误对象0x75610453:指针被释放没有被分配 ***在malloc_error_break断点设置为调试”后,我打电话的setDataSource。我的MetricsView不再是自定义类,只是默认的UITableView。我是否需要调用metricsView alloc自己? – 2013-05-07 21:50:39

+0

哪来现在的工作,感谢家伙! – 2013-05-07 22:13:31

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

即,另一方法是数据源方法。除非将此类设置为表视图的数据源,否则不会调用它们。

奇怪的是,你已经把这段代码放入了UITableView子类本身。好吧,这很奇怪,它违反了MVC,但如果你真的想要,你可以做到。但是,您必须将UITableView子类设置为其自己的数据源(并且可能是其自己的代理)。这不会自行发生,你必须做。

后来编辑:但是,一般来说,我会首先怀疑UITableView的子类化的需求和合意性。我很难想到这样做会有用的情况。只需将您的桌面视图放入界面,将其delegatedatasource插座挂接到View Controller,即可完成。现在视图控制器得到numberOfSectionsInTableView:和其他调用,正如它应该。

+0

我想他只是没有想到UITableView子类本身和委托/数据源之间的区别。 – 2013-05-07 20:36:19

+0

@Nicolas我隐约明白这一点。刚开始学习目标C. – 2013-05-07 20:59:50

+0

是否将添加到我的MetricsView接口,然后通过故事板以某种方式链接它? – 2013-05-07 21:02:03