我有一个UITableViewController
,其中我在cellForRowAtIndexPath
方法中定义了一些特定的单元格属性。我实际定义任何特定内容的唯一方法是cellForRowAtIndexPath
方法。我没有包括任何其他方法。 (基本上UITableViewController除了cellForRowAtIndexPath之外是空的)
现在,我正在尝试基于这个UITableViewController进行子类化,但我的问题是如何为sublcass设置cellForRowAtIndexPath?如果我将其留空,应用程序会崩溃,因为它需要定义一个单元格。但是,它不应该使用基类中定义的单元格吗?
我究竟需要在子类'cellForRowAtIndexPath方法中使用我在基类中创建的单元格设置?
编辑我被告知解决方案,对于任何想知道的人,你用类似
之类的内容调用你的子类中的超级类UITableViewCell *cell = (UITableViewCell *)[super tableView:tableView cellForRowAtIndexPath:indexPath];
return cell;
这会将super的单元格返回到您的sublcass,然后返回该单元格。
答案 0 :(得分:1)
此方法是表视图数据源协议的必需部分,您需要指定该协议。如果你看一下UITableViewController的开发者文档,你会看到cellForRowAtIndexPAth不是它的函数;它位于UITableViewDataSource which you can find here下。这意味着,基类中没有实现;协议中的函数是抽象的,你应该扩展它们并实现它们。
如果您打算创建一个空表,则可以返回空单元格。只需分配它们并在函数中返回它们;子类化表视图单元格不是必需的。一旦您的应用程序停止崩溃,您可以指定所需的文本。使用indexPath使不同部分或不同行的单元格指定不同的文本。
答案 1 :(得分: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"
答案 2 :(得分:0)
你的继承和授权令人困惑。请注意,UITableView
需要一个类UITableViewDelegate
和UITableViewDataSource
。此类不需要从UITableView
继承。我认为通过继承UITableViewCell
答案 3 :(得分:0)
我想你会发现你的UITableViewController - 包含cellForRowAtIndexPath实际上已经是UITableViewController的子类。它的标题将如下所示:
#import <UIKit/UIKit.h>
@interface MyTableViewController : UITableViewController
@end
UITableViewController的区别是
后者意味着它必须实现至少两个数据源方法。作为委托方法,这些是在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:以便表知道它需要多大。