4

我有一个UITableViewController我在方法中定义了一些特定的单元格属性cellForRowAtIndexPath。我真正定义任何特定的唯一方法是cellForRowAtIndexPath方法。我没有包括任何其他方法。(所以基本上 UITableViewController 除了 cellForRowAtIndexPath 是空的)

现在,我正在尝试基于此 UITableViewController 进行子类化,但我的问题是如何为 sublcas 设置 cellForRowAtIndexPath?如果我将其留空,应用程序会崩溃,因为它需要定义一个单元格。但是,它不应该使用基类中定义的单元格吗?

我必须在我的子类的 cellForRowAtIndexPath 方法中添加什么才能使用我在基类中创建的单元格设置?

编辑我被告知解决方案,对于任何想知道的人,您可以在子类中调用超级类,例如

UITableViewCell *cell = (UITableViewCell *)[super tableView:tableView cellForRowAtIndexPath:indexPath];
return cell;

这会将超级单元格返回给您的子单元格,然后您返回该单元格。

4

4 回答 4

1

如果我理解正确,您有一个UITableViewCell要在tableview:cellFowRowAtIndexPath:.

您需要调用registerClass:forCellReuseIdentifier:自定义类和定义的重用标识符tableview:cellFowRowAtIndexPath:以使其返回此类的实例。

例如:

- (void)viewDidLoad
{
   [super viewDidLoad];
   [self.tableView registerClass:[CustomTableViewCell class] forCellReuseIdentifier:@"CustomCell"];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomCell";
    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...

    return cell;
}

别忘了打电话#import "CustomTableViewCell.h"

于 2013-01-31T19:54:24.327 回答
1

该方法是表格视图数据源协议的必需部分,需要您指定。如果您查看 UITableViewController 的开发人员文档,您会发现 cellForRowAtIndexPAth 不是它的函数;它位于 UITableViewDataSource 下,您可以在此处找到。这意味着,基类中没有实现;这些功能在协议中是抽象的,您应该扩展它们并实现它们。

如果您打算创建一个空表,则可以返回空单元格。只需分配它们并在函数中返回它们;不需要对表格视图单元进行子类化。一旦您的应用停止崩溃,您就可以指定所需的文本。使用 indexPath 使不同节或不同行的单元格指定不同的文本。

于 2013-01-31T19:26:43.377 回答
0

您混淆了继承和委托。请记住, aUITableView需要一个类才能成为它UITableViewDelegateUITableViewDataSource。这个类不需要继承自UITableView. 我认为通过继承一个UITableViewCell

于 2013-01-31T19:18:23.887 回答
0

我想你会发现你的 UITableViewController - 包含 cellForRowAtIndexPath 实际上已经是 UITableViewController 的子类。它的标题将如下所示:

#import <UIKit/UIKit.h>

@interface MyTableViewController : UITableViewController

@end

UITableViewController 的区别在于

  • 它有一个 self.tableView 属性,其中包含对其 tableView 的引用。
  • 它向通常的 UIViewController 超类添加了另外两个属性和一个方法,但更重要的是......
  • 它(通常)充当 tableView 的委托和数据源

后者意味着它必须实现至少两个数据源方法。作为委托方法,这些没有在 UITableViewController 超类中实现,因此必须包含两者:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...

    return cell;
}

您已经实现cellForRowAtIndexPath了,但您还需要实现 numberOfRowsInSection: 以便表知道它需要多大。

于 2013-01-31T19:43:39.380 回答