0

tableview用数组创建了一个。我的数组中有 7 个项目。但在cellForRowAtIndexPath方法上我无法得到indexpath.row == 6。可能是什么原因。代码如下。

  -(void)viewDidLoad
    {
      [super viewDidLoad];

      self.menu = [NSArray arrayWithObjects:@"Home",@"ansCategory",@"askQue",@"myQue",@"likedQue", @"topQue", @"topUser",nil];             
    }

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
     {
       // Return the number of sections.
       return 1;
     }

      -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
     {
        // Return the number of rows in the section.
        // NSLog(@"count::::::%d",self.menu.count);
           return self.menu.count;
     }
       -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *cellIdentifier = @"Cell";    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

        NSLog(@"rows:%@",indexPath);
        NSLog(@"row:%@",[self.menu objectAtIndex:indexPath.row]);
    }
    return cell;

 }

我得到以下输出:

[这里](https://www.dropbox.com/s/pz6t34xr7l4glxz/menu1.png

第一个索引覆盖在最后一个索引上。

4

4 回答 4

5

该单元被重复使用。将您的日志语句放在以下内容之外if(cell=nil)

这是在表格视图中输出数组内容的工作示例。数组中第 7 个索引为 6 的项(“topUser”)为红色。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

    NSLog(@"rows:%@",indexPath);
    NSLog(@"row:%@",[self.menu objectAtIndex:indexPath.row]);

    cell.textLabel.text = self.menu[indexPath.row];

    if (indexPath.row == 6)
        cell.textLabel.textColor = [UIColor redColor];        
    return cell;
}

在此处输入图像描述

于 2013-08-13T06:06:09.810 回答
3

对于 N 个项目,最后一个索引路径是 (N-1)

因此,如果您有 10 项,则最后一项的索引路径为 9,因为数组中第一项的索引路径为 0。

项目的 indexPath 以 0 而不是 1 开头。

尝试在您的代码中访问您的答案中的索引路径,如下所示

代替 :

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

        NSLog(@"rows:%@",indexPath);
        NSLog(@"row:%@",[self.menu objectAtIndex:indexPath.row]);
    }

    if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle                   reuseIdentifier:cellIdentifier];
 }
    //Access the indexPath outside here... 
    //Because once the cells are created and not nil 
    //then the above scope will be bypassed.
    NSLog(@"rows:%@",indexPath);
    NSLog(@"row:%@",[self.menu objectAtIndex:indexPath.row]);
于 2013-08-13T06:18:01.537 回答
2
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

每当需要创建新行并将其添加到 tableview 时都会执行。tableview 填充行,以便当它需要在屏幕上显示时,它是通过调用相同的方法创建的。所以如果你的第 7 行不可见在屏幕上,该方法不会为第 7 行执行,即 indexpath.row 6,因此要获得记录第 7 行的方法,只需向下滚动,以便表格可以看到该单元格,它将执行该方法,您可以有日志

于 2013-08-13T06:17:53.063 回答
2

我将代码更改为以下行并且它有效。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
于 2013-08-16T14:17:28.567 回答