16

我已经尝试搜索一些关于如何填充表格视图的教程,但我发现的都是旧的和过时的视频。我尝试从最近的一个中进行,但它不起作用。我有

- (void)viewDidLoad
{
    [super viewDidLoad];
   [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    [chemarray addObject:@"2"];
    [chemarray addObject:@"test"];
    [chemarray addObject:@"3"];
    [chemarray addObject:@"science"];  
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [chemarray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"     forIndexPath:indexPath];

     cell.textLabel.text = [chemarray objectAtIndex:indexPath.row];
    return cell;
}

根据本教程,运行时,它应该显示我的数组中的项目,但对我来说,它没有!有谁知道如何解决这一问题?

4

4 回答 4

24

您忘记为单元格标识符注册nib/class。

形成 AppleUITableView文档:

重要提示:在调用方法之前,您必须使用registerNib:forCellReuseIdentifier:or 方法注册类或 nib 文件 。registerClass:forCellReuseIdentifier:dequeueReusableCellWithIdentifier:forIndexPath:

这是一个普通的例子UITableViewCell

- (void) viewDidLoad {
   [super viewDidLoad];

   [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}

如果您不注册 nib/class,则该方法dequeueReusableCellWithIdentifier:forIndexPath:本质上与dequeueReusableCellWithIdentifier:. 它不会自动为您创建实例。

于 2012-10-25T07:08:55.020 回答
3

我遇到了同样的问题。如果您使用的是 iOS6,那么我假设您使用的是故事板并且您将视图控制器与您的自定义类相关联。

然后解决方案是进入情节提要,转到表格视图中单元格的属性并将标识符值更改为“单元格”。无需在 ViewDidLoad 中注册该类。

于 2013-01-24T02:23:01.027 回答
1
  1. 将委托设置为uitableview.delegate = self
  2. 检查您是否有声明协议 <UITableViewDelegate, UITableViewDataSource>
  3. 如果您不使用情节提要,请确保在 cell==nil 时初始化单元格

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
     if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
     }
    
于 2012-10-25T07:08:18.920 回答
1
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.textLabel.text = [chemarray objectAtIndex:indexPath.row];
    return cell;
}

确保你有UITableViewDataSource,UITableViewDelegate在你的.h和连接的tableview委托、数据源和cellindentifierCell 中.xib

于 2013-07-19T16:41:23.150 回答