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 的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章
从单词列表中创建对象(var name:[NSArray])
Objective C - NSArray 的 indexOfObject:不起作用