如果滚动过去,则将UITableView的值存储在NSString中

时间:2013-09-16 09:28:27

标签: iphone ios objective-c

我对我正在开发的应用程序有一个有趣的要求。我有一个UITableView,里面有很多项目。我正在尝试记录哪些项目被查看(滚动过去)。例如,如果列表包含字母AZ,并且用户向下滚动UITableView到字母T,则值A,B,C,D,EF ... T将存储为NSString NSUserDefaults

我想将实际的行文本存储为NSString中的值。例如,A而不是1,B而不是2等......

我做了一些挖掘但似乎无法找到任何有用的东西。关于如何实现这一目标的任何想法?

3 个答案:

答案 0 :(得分:2)

功能

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
每次查看单元格时都会调用

。然后,您可以使用一种方法将indexPath.row转换为字母并将其存储在NSUserDefaults中

编辑 - 重新阅读您的问题我得到的印象是您只是谈论行的通用标题。这很容易 - 因为你必须在cellForRowAtIndexPath中设置标题文本 - 所以你可以在执行此操作时将其弹出为默认值。

答案 1 :(得分:1)

制作一个plist(NSDictionary)并使对(键值)像1 - A 2- B等等。如果要存储它,请编写一个方法,该方法将搜索您的值,以获取密钥。

如果你有动态数据:

制作NSMutableDictionary

NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];

在:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   [dict setObject:cell.label.text forKey:indexPath.row];

}

编辑:

您可以使用此方法获取可见行:

indexPathsForVisibleRows

返回一个索引路径数组,每个索引路径标识接收器中的可见行。

- (NSArray *)indexPathsForVisibleRows

返回值 一组NSIndexPath对象,每个对象表示行索引和段索引,它们共同标识表视图中的可见行。如果没有可见的行,则返回nil。

答案 2 :(得分:1)

我假设您正在填充包含A,B,C等的数组中的列表。

你的阵列是: (A,B,C,d,E,F,G)

因此,首先将数组的每个索引转换为NSMutableDictionary,使得数组如下所示,此处访问指的是该行已被访问过或没有,默认情况下为0表示否:

(
{
value = "A"
visited = 0
},
{
value = "B"
visited = 0
},
{
value = "C"
visited = 0
},
{
value = "D"
visited = 0
},
)

现在在cellForRowAtIndexPath上执行此操作:

NSMutableDictionary *editDict = [arrayObjects objectAtIndex:indexPath.row];
[editDict setInteger:1 forKey:@"visited"];
[arrayObjects replaceObjectAtIndex:indexPath.row withObject:editDict];

这样,访问过的所有行都有1个用于密钥“已访问”

然后你可以运行一个循环来保存与visited = 1相对应的值,无论你想要什么