【问题标题】:First element of NSArrayNSArray 的第一个元素
【发布时间】:2012-03-27 19:14:32
【问题描述】:

我有一个有趣的麻烦:

我有一个NSArray,其中填充了一些动物名称(字符串)。我使用这个数组来填充UITableView. 当您按下任何cell(动物)时,您会在详细视图中移动并阅读有关此动物的更多信息。然后,我改进了我的应用程序,现在在UITableView 中,第一个单元格是只显示 UITableView 中有多少动物的单元格。就像:

找到的动物:4(第一个单元格)

  • 狗(第二个牢房)
  • 猫(第三细胞等)
  • 仓鼠

问题是,当您按下第一个单元格(找到的动物:4)时,您会在随机动物的详细视图中移动。这是因为在index 0 的数组中有一只动物。因此,您在此动物的详细视图中移动。当用户按下第一个单元格时,我不想做任何事情。我怎样才能到达它?

【问题讨论】:

    标签: iphone objective-c uitableview nsarray


    【解决方案1】:

    在表格视图的 didSelectRowAtIndexPath 方法中,如果提供的 indexPath 参数行为零,则返回。如果它大于零,则从中减去一,这将成为要显示的项目的数组索引。像这样的:

    - (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [tv deselectRowAtIndexPath:[tv indexPathForSelectedRow] animated:YES];
    
        int idx = [indexPath row];
        if (idx == 0)
        {
            return;
        }
    
        idx--;
        // use idx as the index into your array of animals as you did initially
    }
    

    【讨论】:

      【解决方案2】:

      基于 indexPath.row 条件(在您的情况下应该为零)

      cell.selectionStyle = UITableViewCellSelectionStyleNone;

      但是这个方法还是会调用didSelectRowAtIndexPath,所以你必须做如下操作

      cell.userInteractionEnabled = NO;

      【讨论】:

      • 感谢@SmartTree。基于 indexPath.row 您应该禁用用户交互以避免调用 didSelectRowAtIndexPath 不必要(根据您的条件)。所以你甚至不需要检查你的 didSelectRowAtIndexPath。
      • 对,我做到了。主要问题是第一个元素。我的意思是,如果我的数组有 4 个动物,tableView 将只显示其中的 3 个,因为第一个单元格中仍然存在 1 个动物。但是第一个单元格没有显示这些动物,因为它显示了 tableView 中动物的数量。
      • 哦,好吧,我没有正确看到您的问题。是的,在那种情况下,danh的答案是完美的。我会在部分标题中显示动物的数量(您将在数组中显示):P
      • hmm,或许在标题中显示动物的数量会更好,我会考虑的。但我敢肯定,它比我的更简单:)
      【解决方案3】:

      我认为更好的解决方案是在模型中表示您希望在视图中看到的内容。所以我会这样做:

      myModel = [NSMutableArray arrayWithObjects:@"3 animals", @"dog", @"cat", @"chicken", nil];
      // here, wherever else my model is altered:
      [myModel replaceObjectAtIndex:0 withObject:[NSString stringWithFormat:@"%d animals", myModel.count-1]];
      

      现在除了@Praveen-K 在 indexPath.row = 0 处配置单元格时建议的以外,其他任何地方都不需要特殊逻辑...

      cell.userInteractionEnabled = NO;
      

      【讨论】:

      • 谢谢@danh。我们也可以这样做。
      【解决方案4】:

      试试这个......

      -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
       {
         if (indexPath.row ==0)
             {
              //Select first Row;
             }
          else
              {
               //Do What you Want
              }
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 2022-11-16
        相关资源
        最近更新 更多