gpt4 book ai didi

iphone - 如何通过单元格的文本数据获取 NSIndexPath(对于表格单元格)?

转载 作者:行者123 更新时间:2023-12-03 20:43:21 26 4
gpt4 key购买 nike

在我的应用程序中,我有一个 TableView Controller ,它使用 .plist 文件中的部分构建一个表。每个单元格都是唯一的,因为它基于为 plist 文件中的每个项目存储的 ID 参数,并且不能重复。作为 plist 的示例:

<dict>
<key>Section One</key>
<dict>
<key>Item 0</key>
<dict>
<key>name</key>
<string>Some name one</string>
<key>picfile</key>
<string>take8.png</string>
<key>takeItemId</key>
<integer>101</integer>
</dict>
<key>Item 1</key>
<dict>
...
</dict>
</dict>
<key>Section Two</key>
<dict>
<key>Item 0</key>
<dict>
<key>name</key>
<string>Some name two</string>
<key>picfile</key>
<string>take6.png</string>
<key>takeItemId</key>
<integer>103</integer>
</dict>
<key>Item 1</key>....

所以我的表格由包含文本标签(takeItemID)、文件中的图片和另一个文本标签(名称)的单元格组成。现在,我有一些事件将 ID 作为字符串(我从 tcp 套接字连接接收命令)。我希望我的表格在包含收到的 ID 字符串作为相应文本标签的单元格中突出显示(以更改背景)。以某种方式从 plist 获取 NSIndexPath 也可以。

编辑:下面是我的 TableView:cellForRowAtIndexPath:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];

NSString *sGroup = [sequencerGroups objectAtIndex:section];
NSDictionary *tSection = [sequencer objectForKey:sGroup];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SecuencerCell"];

NSString *takeItemName = [[[tSection allKeys] sortedArrayUsingSelector:@selector(compare:)] objectAtIndex:row];
NSDictionary *takeItem = [tSection objectForKey:takeItemName];

UILabel *idLabel = (UILabel *)[cell viewWithTag:104];
idLabel.text = [NSString stringWithFormat:@"%@",[takeItem valueForKey:@"takeItemId"]];

UILabel *nameLabel = (UILabel *)[cell viewWithTag:102];
nameLabel.text = [takeItem valueForKey:@"name"];

UIButton *piconButton = (UIButton *)[cell viewWithTag:101];
UIImage *TakeImage = [UIImage imageNamed:[takeItem valueForKey:@"picfile"]];
[piconButton setBackgroundImage:TakeImage forState:UIControlStateNormal];


UIButton *resumeButton = (UIButton *)[cell viewWithTag:103];
UIImage *resumeImage = [UIImage imageNamed:@"resume.png"];
[resumeButton setBackgroundImage:resumeImage forState:UIControlStateNormal];



return cell;
}

编辑:这里是sequencerGroups和sequencer的来源:

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Sequencer.plist"];

NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
self.sequencer = dict;
[dict release];

NSArray *array = [sequencer allKeys];

self.sequencerGroups = array;

非常感谢,马克西姆

最佳答案

要从 rowNumber 创建索引路径,您可以使用:[NSIndexPath indexPathForRow:<#(NSInteger)#> inSection:<#(NSInteger)#>];

一旦您获得了行号和节号,这将使行->indexPath 转换变得容易。

所以你的问题就变成了 - 如何从 takeItemId 获取行号和节号。

我认为我处理它的方法(但是,您可以考虑多种方法,具体取决于加载 plist 的执行时间的关键程度) - 在解析 plist 后,我​​将构造一个 NSDictionary ,其中将 takeItemId 映射到 IndexPath。

一个例子:

NSDictionary *myPlist = ...
NSMutableDictionary *mapKeyToIndexPath = [NSMutableDictionary dictionary];
NSUInteger section = 0;
NSUInteger row = 0;
for (id sectionKey in [myPlist allKeys]) {
// Parse Sections First
NSDictionary *section = [myPlist objectForKey:sectionKey];
for (id rowKey in [section allKeys]) {
// Parse Rows Next
NSDictionary *row = [section objectForKey:rowKey];
NSString *takeItemId = [row objectForKey:@"takeItemId"];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row++ inSection:section];
[mapKeyToIndexPath addObject:indexPath forKey:takeItemId];
}
// Move to first row, next section
row = 0;
section ++;
}

一旦你有了 mapKeyToIndexPath 字典,当你在事件中收到 takeItemId 时,你就可以获取正确的索引路径并将其传递给 [myTableDataSource tableView:myTableView highlightCellAtIndexPath:indexPath];

关于iphone - 如何通过单元格的文本数据获取 NSIndexPath(对于表格单元格)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com