objective-c – 如何从kvo处理NSIndexSet以更新表视图?
发布时间:2020-12-16 10:19:13 所属栏目:百科 来源:网络整理
导读:我开始使用键值观察,并且我正在观察的可变数组在更改字典中给出了NSIndexSets(Ordered mutable to-many).问题是表视图,据我所知,我希望我给它NS Arrays充满索引. 我考虑过实现一个自定义方法来将一个方法转换为另一个,但这似乎很慢,我得到的印象是,当数组发
我开始使用键值观察,并且我正在观察的可变数组在更改字典中给出了NSIndexSets(Ordered mutable to-many).问题是表视图,据我所知,我希望我给它NS
Arrays充满索引.
我考虑过实现一个自定义方法来将一个方法转换为另一个,但这似乎很慢,我得到的印象是,当数组发生更改时,必须有更好的方法使这个表视图更新. 这是我的UITableViewDataSource的方法. -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ switch ([[change valueForKey:NSKeyValueChangeKindKey] unsignedIntValue]) { case NSKeyValueChangeSetting: NSLog(@"Setting Change"); break; case NSKeyValueChangeInsertion: NSLog(@"Insertion Change"); // How do I fit this: NSIndexSet * indexes = [change objectForKey:NSKeyValueChangeIndexesKey]; // into this: [self.tableView insertRowsAtIndexPaths:<#(NSArray *)#> withRowAnimation:<#(UITableViewRowAnimation)#> // Or am I just doing it wrong? break; case NSKeyValueChangeRemoval: NSLog(@"Removal Change"); break; case NSKeyValueChangeReplacement: NSLog(@"Replacement Change"); break; default: break; } } 解决方法
这似乎很容易.使用
enumerateIndexesUsingBlock: 枚举索引集并将每个索引粘贴到NSIndexPath对象中:
NSMutableArray * paths = [NSMutableArray array]; [indexes enumerateIndexesUsingBlock:^(NSUInteger index,BOOL *stop) { [paths addObject:[NSIndexPath indexPathWithIndex:index]]; }]; [self.tableView insertRowsAtIndexPaths:paths withRowAnimation:<#(UITableViewRowAnimation)#>]; 如果你的表视图有部分,它只是有点复杂,因为你需要获得正确的节号,并在索引路径中指定它: NSUInteger sectionAndRow[2] = {sectionNumber,index}; [NSIndexPath indexPathWithIndexes:sectionAndRow length:2]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |