iphone:在uitableviewcell中显示JSON数据

时间:2012-02-10 03:44:23

标签: iphone objective-c ios json uitableview

我使用了以下代码:

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


    static NSString *CellIdentifier = @"Cell";



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
      //  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

    }    
if (indexPath.row == 0) {

            CGRect myImageRect = CGRectMake(120.0f, 5.0f, 70.0f, 55.0f);
            UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
            [myImage setImage:[UIImage imageNamed:@"logo.png"]];
            [cell.contentView addSubview:myImage];
        }
        else  {

            int arrayIndex = [indexPath row]-1 ;
            mdict = [mmenuitems objectAtIndex:arrayIndex];
            [mdict retain];
            cell.textLabel.text =[mdict objectForKey:@"name"];

我在mmenuitems中获得了正确的JSON解析消息,并使用indexPath.row = 0来显示徽标。
但问题是我没有得到tableview中的最后一项 此外,当我滚动tableview时,数据会随机重新加载,同样会重复。

4 个答案:

答案 0 :(得分:1)

您可以在numberOfRowsInSection方法中添加+ 1。

答案 1 :(得分:1)

我可以说你需要在你的行数方法中添加1:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
     return [mmenuitems count]+1//add 1 for the logo cell
 }

因此,您的行数将是徽标的mmenuitems数组+ 1单元格中的所有对象。

<强>但是

更好的方法是将您的徽标添加到表格视图header view而不是表格视图行,您可以在视图中加载表格视图后加载:

        CGRect myImageRect = CGRectMake(120.0f, 5.0f, 70.0f, 55.0f);
        UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
        [myImage setImage:[UIImage imageNamed:@"logo.png"]];
        [self.tableView.tableHeaderView addSubview:myImage];

它会将您的徽标添加到第一个表格行顶部的视图中,并且不会混合在您的表格行中。我相信它会解决你的重复问题。

祝你好运

答案 2 :(得分:0)

您可以尝试为单元格使用不同的标识符。由于单元格正在被重用,因此您的内容已被覆盖。这不是好方法,但它解决了这个问题。

答案 3 :(得分:0)

首先,您需要每次都重置您的单元格以避免陈旧数据

if (cell == nil) {
  //  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

}  
cell.textLabel.text = nil; //This clears any stale label
for(UIImageView *view in cell.contentView.subviews)
{
    [view removeFromSuperView]; // This clears any subview added
}  

其次,

您的行数应为

 [mmenuitems count] + 1

我相信目前它只是[mmenuitems count]