NSArray 的第一个元素

Posted

技术标签:

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

我有一个有趣的麻烦:

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

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

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

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

【问题讨论】:

【参考方案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
        
  

【讨论】:

以上是关于NSArray 的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NSArray 的第一个索引处添加对象

从单词列表中创建对象(var name:[NSArray])

iOS开发——NSArray中的字典排序

Objective C - NSArray 的 indexOfObject:不起作用

在一个用 JSON 填充的 NSArray 中搜索特定的标题

从核心数据读取时获取属性名称和值