设置隐藏数据的UITableView细胞

问题描述 投票:1回答:3

我搜索了一下这里和谷歌,但我真的不能找到发掘,我可以清楚地了解。基本上我想要做的是显示的名单,那么当单击表格这些名字的ID添加到另一个阵列,与他们的ID一起。我目前工作的解决方案是基于嵌套NSMutableArrays但我不知道这是做的最好的事情。我认为这将是理想的还有一个“场”在细胞(我的意思是这样cell.text通过现场)写上,这样我可以存储我的隐藏价值。

有没有办法这样做?

ios objective-c uitableview cell
3个回答
2
投票

您需要调整您的想法。可可坚决遵循MVC(模型 - 视图 - 控制器)设计模式,你应该学会这样认为。

在MVC中,该模型是存储数据的程序的一部分。查看是什么显示信息给用户和与用户交互。

该控制器是在作为控制逻辑和馈送数据来回模型和视图之间的大脑。

UIKit中,对象以查看他们的名字是视图对象,以及与控制器在他们的名字是控制对象的对象。作为一般规则的模型对象是你的,因为它的特殊应用。

表视图是视图对象。它不存储信息,它呈现给用户和/或从用户那里收集它。

阵列通常是用于存储被在表视图中呈现的数据的最佳选择。如果你有多个区段,并在比每个部分的阵列,每个部分的多行,包含与每行数据阵列的表视图是一个很好的选择。除非你有一个分段表视图忘掉那不过。这将只是迷惑你。

对于只有一个路段的“平面”表视图,单个阵列通常是你想要的。

你如何存储在单元格中显示的数据是一个设计问题。一个简单的答案就是使用字典中的每个单元格中的数据。所以,你风与字典的数组。

如果你是舒适的创建自定义对象的自定义的数据存储对象使你的代码干净了一点。然而,你可能会想实现NSCoding协议在你的数据对象,所以你可以很容易地将它们保存到磁盘。

使用数组来存储数据的单元格是不是一个很好的选择,因为数组使用数字索引他们的数据。您可能必须要在你的单元格中显示的名称和图像,以及员工ID和薪水,和其他一些东西。你应该使用什么样的数字索引这些值?不清楚。现在,如果你使用字典,你可以用有意义的键字:

cellData[@"name"]
cellData[@"imageName"]

或更好,但定义常量为你的钥匙:

#define kNameKey @"name"
#define kImageNameKey @"imageName"

然后

cellData[kNameKey]
cellData[kImageNameKey]

你没有这样的风险某处错误键入关键字串并引入你必须去找出一个错误。

如果你是一个初学者,你可能想使用词典的数组开始了。你已经使用了一段时间这种方法后,你可能会决定迁移到自定义的数据对象。

假设我们使用的字典为每个单元格的数据,从现在开始储存。

现在,你的问题。这是完全确定,在字典中存储更多的信息,对每个小区而显示在任何一个时间。这些数据是不是真的隐藏的,它只是没有(还)显示。然后,如果用户采取行动,这意味着要公开更多的数据,告诉表视图重新加载细胞。当用户做一些事情,改变了你想要的信息,你可能要保持信息的阵列关于每个电池单元的状态(例如布尔,告诉如果表视图应该显示为您的数据阵列中的每个条目的薪酬信息。)显示,在该显示状态数组中的索引改变适当的设置,并告诉表视图重新加载细胞。在你的cellForRowAtIndexPath方法,您要检查什么,以显示该单元格,然后获取相应的数据,并将其安装到单元的显示状态阵列(并清除不应该显示的字段,因为它们可能从剩下使用的电池最后一次。)

如果你有字典的数组,那么你的cellForRowAtIndexPath方法可能看上去像这样一个条目的属性:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSInteger row = indexPath.row;
  NSDictionary *rowData = dataArray[row]
  NSString *name = rowData[kNameKey];
  NSString *imageName = rowData[kImageNameKey];
}

-1
投票

想更多的面向对象的,它会让这样的事情容易得多。

建立一个叫做Person有两个属性的类:nameID。子类的UITableViewCell采取Person名单,为此,将显示每个名称。当单击单元格,每个Person添加到相应的位置。

这里是一个链接,就如何继承自己的自定义的tableview细胞教程:qazxsw POI

至于Person类,创建一个新的类类型的NSObject的名为Person。在Person.h,添加以下内容:

http://www.pumpmybicep.com/2014/07/21/designing-a-custom-uitableviewcell-in-interface-builder/

而在Person.m,添加以下内容:

@property (nonatomic) NSString *name;
@property (nonatomic) int *ID;

- (id)initWithName:(NSString *)name ID:(int)ID;

现在,您可以使用- (id)initWithName:(NSString *)name ID:(int)ID { if (self = [super init]) { self.name = name; self.ID = ID; } return self; } 传输数据。

初始化:

Person

得到:

Person *myPerson = [[Person alloc] initWithName:myName ID:1]; 

传输ID:

customCell.text = myPerson.name;

-2
投票

你可以继承一个UITableViewCell并添加额外的属性

[clickedIDs addObject:[NSNumber numberWithInt:myPerson.ID]];

例如。然后:

@property (nonatomic, strong) NSString *hidden;

那怎么办你问什么,但它似乎是一个奇怪的要求,所以你可能要考虑,如果这是真的实现你想要做的最好的方式。我不是从你的问题你已经尝试过,虽然明确。

© www.soinside.com 2019 - 2024. All rights reserved.