Preserve selection when updating chooser items

This commit is contained in:
Allan Odgaard
2014-11-14 10:22:41 +01:00
parent 5b39bdc98b
commit 2721d4eaa5

View File

@@ -277,9 +277,27 @@ static void* kFirstResponderBinding = &kFirstResponderBinding;
- (void)setItems:(NSArray*)anArray
{
NSIndexSet* oldSelectedRowIndexes = _tableView.selectedRowIndexes;
NSArray* selectedItems;
if([oldSelectedRowIndexes count] > 1 || [oldSelectedRowIndexes count] == 1 && [oldSelectedRowIndexes firstIndex] > 0)
selectedItems = [_items objectsAtIndexes:oldSelectedRowIndexes];
_items = anArray;
[_tableView reloadData];
[_tableView scrollRowToVisible:_tableView.selectedRow == -1 ? 0 : _tableView.selectedRow];
NSMutableIndexSet* rowIndexes = [NSMutableIndexSet new];
for(id item in selectedItems)
{
NSUInteger row = [_items indexOfObject:item];
if(row != NSNotFound)
[rowIndexes addIndex:row];
}
if([rowIndexes count] == 0)
[rowIndexes addIndex:0];
[_tableView selectRowIndexes:rowIndexes byExtendingSelection:NO];
[_tableView scrollRowToVisible:[rowIndexes firstIndex]];
[self updateStatusText:self];