【问题标题】:UITableView Cells with Formatted Text Parsed from an XML带有从 XML 解析的格式化文本的 UITableView 单元格
【发布时间】:2012-12-17 13:10:22
【问题描述】:

我正在使用 NSXMLParser 从 URL 解析 XML 文件,我解析的项目被添加到 UITableView 从中加载其数据的数组中。除其他事项外,我正在解析这些事件发生的事件和日期的标题。这些项目被解析并添加到名为stories 的数组中。我的目标是让事件的标题成为我的 TableView 中每个单元格的主要文本,而日期是副标题。每个事件的标题不需要格式化(即,如果 XML 文件显示:“事件一”,那么这就是应该显示的内容)我使用此方法成功:

title 是 XML 中项目的标题,stories 是 TableView 从中加载数据的数组。)

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

    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]
        initWithStyle:UITableViewCellStyleSubtitle
        reuseIdentifier:MyIdentifier];
    }

    // Set up the cell
    NSUInteger storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
    cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];

    return cell;
}

但是我确实需要格式化我解析的所有日期,我使用NSDateFormatter 这样做,我对NSDateFormatter 完成工作后的日期格式感到满意。如果我不需要格式化我可以使用的日期:

cell.detailTextLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"isodate"];

实现我的目标。一旦NSDateFormatter 完成它的工作,我就有一个名为currentDate 的变量(NSMutableString),其中包含我格式化日期的字符串值,使用控制台我可以看到这会为 XML 中的每个项目产生所需的结果.当我使用:

cell.textLabel.text = currentDate;

最后我的表格中的每个单元格都有 XML 文件中最后一项的日期(假设它看起来不错,格式正确)。我试过移动我的方法无济于事。如果您不介意为我指明正确的方向,我需要知道如何将变量 currentDate 的值包含在 UITableView 的字幕文本中,其中项目的标题和日期单元格中的项目相互对应。

【问题讨论】:

    标签: objective-c ios uitableview nsxmlparser


    【解决方案1】:

    问题是线

    NSUInteger storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
    

    您应该改用 indexPath.row,

    cell.textLabel.text = [[stories objectAtIndex: indexPath.row] objectForKey: @"title"];
    

    【讨论】:

      【解决方案2】:

      一些想法:

      1. 关于您的日期问题,听起来您将日期存储在名为currentDate 的单个实例变量中。鉴于您没有共享该代码,我猜您并没有在cellForRowAtIndexPath 中这样做,而是可能在您的解析器或类似的东西中这样做。不幸的是,这会给表格中的每个单元格提供您解析的最后一行的日期)。你应该要么

        • cellForRowAtIndexPath 中调用您的日期格式(或者,更好的是,调用一个进行日期格式设置的方法),特别是获取[[stories objectAtIndex: storyIndex] objectForKey: @"isodate"],对其进行格式化,并相应地设置detailTextLabel.text;或

        • 与其将格式化日期存储在单个 currentDate 变量中,不如为格式化日期添加一个字典键并将其与您从 XML 解析的所有其他内容一起存储在可变字典中(例如读取 isodate ,格式化一个字符串并用唯一键将其保存回同一个字典,可能是formattedDate)。

      2. NSUInteger storyIndex = indexPath.row; 是一种更常见的语法,如果您要抓取与 tableview 的给定行关联的新闻项。

      【讨论】:

        【解决方案3】:

        您可以使用键-值对将解析数据存储到NSDictionary中。在这里,您可以使用标题作为键和日期作为值,这样两个数据将对应每个数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-01
          • 2020-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多