如何将所有选定的单元格文本标签文本存储在NSMutableArray中? 当取消选择单元格时,如何从NSMutableArray中删除正确的单元格文本?
我到目前为止:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
static NSString *CellIdentifier = @"Cell";
PFTableViewCell *cell = (PFTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if ([self.allSelectedUsers containsObject:indexPath]) {
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
NSLog(@"Yeeees");
}else{
[cell setAccessoryType:UITableViewCellAccessoryNone];
}
// Configure the cell
cell.textLabel.text = object[@"username"];
return cell;
}
这是我选择一个单元格的时候:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if ([self.allSelectedUsers containsObject:indexPath]) {
[self.allSelectedUsers removeObject:indexPath];
}
else{
[self.allSelectedUsers addObject:indexPath];
}
NSLog(@"%d", self.allSelectedUsers);
[tableView reloadData];
}
当我检查日志时,它不会显示有关单元格文本标签的任何信息。
答案 0 :(得分:3)
由于我无法看到你如何获得object
个实例,我建议你回到单元格并再次阅读标题。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// Lazy initialise array
if (!self.allSelectedUsers) {
self.allSelectedUsers = [NSMutableArray new];
}
// Take action
if ([self.allSelectedUsers containsObject:indexPath]) {
[self.allSelectedUsers removeObject:indexPath];
} else {
[self.allSelectedUsers addObject:indexPath];
}
[tableView reloadData];
// Logging all selected users
for (NSIndexPath *sIndexPath in self.allSelectedUsers) {
NSLog(@"%@", [tableView cellForRowAtIndexPath:sIndexPath].textLabel.text);
}
}
答案 1 :(得分:2)
您目前正在存储NSIndexPath
个对象,而不是NSString
个对象,因此您的问题并不完全正确。使用PFTableViewController
,您可以访问选择器objectAtIndexPath:
。
for (NSIndexPath *indexPath in self.allSelectedUsers) {
NSLog(@"%@", [self objectAtIndexPath:indexPath][@"username"]);
}
注意:您不应该在reloadData
响应者中呼叫didSelectRowAtIndexPath:
;改为更改单元格的附件类型。
[[tableView cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryCheckmark];
您还应该实现didDeselectRowAtIndexPath:
以了解用户何时取消选择行。