3

我在尝试在单元格中显示信息时遇到问题,一个在左侧,一个在右侧。我知道使用initWithStylewith UITableViewCellStyleSubtitle。我使用它,但它似乎不起作用。

这是一些示例代码:

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

    if (cell == nil)  {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier];
    }

    Accounts *account = [self.fetchedResultsController objectAtIndexPath];
    cell.textLabel.text = account.name;

    cell.detailTextLabel.text = @"Price";

    return cell;
}

我可以很好地显示 cell.textLabel.text,但是我无法显示简单的“价格”。我尝试了不同的方法,例如将字体大小设置为cell.detailTextLabel.

我也尝试UITableViewCellStyleValue1过一些在旧帖子中建议的方法。设置为“价格”后抛出 NSLog,将 cell.detailTextLabel 显示为 null。

不知道我做错了什么。

编辑:我发现这个: cell.detailTextLabel.text is NULL

如果我删除if (cell == nil)它可以工作...该检查应该到位,那么在使用不同样式时如何使其工作?

4

5 回答 5

17

当使用故事板和原型单元格时,总是从 dequeue 方法返回一个单元格(假设存在具有该标识符的原型)。这意味着你永远不会进入(cell == nil)街区。

在您的情况下,原型单元格未在情节提要中使用字幕样式定义,因此从不使用带字幕的单元格,并且不存在详细文本标签。将情节提要中的原型更改为具有字幕样式。

于 2012-05-08T14:05:11.760 回答
2

仅在您尝试这些行后删除所有代码并检查这是否有效。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
 {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
          cell = [[[UITableViewCell alloc]
             initWithStyle:UITableViewCellStyleSubtitle
             reuseIdentifier:CellIdentifier]
            autorelease];
 }


   cell.textLabel.text=[Array objectAtIndex:indexPath.row];
   cell.detailTextLabel.text=@"Price";


   return cell;
 }
于 2012-05-08T09:29:56.120 回答
1

我看到了问题:在您的方法名称中,UITableView变量名为ltableView,而不是tableView。将其更改为tableView.

于 2012-05-08T13:30:43.977 回答
0

cell.detailTextLable.text应该是cell.detailTextLabel.text。它看起来像一个简单的标签拼写错误。

于 2012-05-07T16:40:21.923 回答
0

这里提到的所有答案实际上都是一种解决方法,即使用故事板。这是一种仅在代码中执行此操作的方法。

基本上不是在 viewDidLoad 中注册单元格的标识符,而是在 cellForRowAtIndexPath: 方法中只做一次。还重置在 viewDidLoad 中注册的单元格 __sCellRegistered = 0;

    static int _sCellRegistered = 0;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell = nil;


if (__sCellRegistered == 0) {
    __sCellRegistered = 1;
    NSLog(@"register cell");

    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"CellIdentifier"];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CellIdentifier"];
};

if (!cell) {
    NSLog(@"dequeue");

    cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
}
于 2017-04-06T23:47:20.857 回答