Skip to content

Commit 53b7c35

Browse files
Ralph ShaneRalph Shane
authored andcommitted
removeTreeNode function.
1 parent 4076b88 commit 53b7c35

5 files changed

Lines changed: 38 additions & 2 deletions

File tree

‎UITreeView/TreeNode.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@
2323

2424
- (instancetype) initWithValue:(id)value;
2525
- (void) addChild:(TreeNode *)newChild;
26+
- (void) removeTreeNode:(TreeNode *)treeNode;
2627
- (NSArray<TreeNode *> *) visibleNodes;
2728
@end

‎UITreeView/TreeNode.m‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,28 @@ - (void) addChild:(TreeNode *)newChild {
4444
[_children addObject:newChild];
4545
}
4646

47+
- (void) removeTreeNode:(TreeNode *)treeNode {
48+
[self _internalRemove:treeNode];
49+
}
50+
51+
- (BOOL) _internalRemove:(TreeNode *)node {
52+
BOOL result = NO;
53+
for (TreeNode *child in _children) {
54+
if (node == child) {
55+
[_children removeObject:node];
56+
result = YES;
57+
break;
58+
}
59+
if (child.isFolder) {
60+
result = [child _internalRemove:node];
61+
if (result) {
62+
break;
63+
}
64+
}
65+
}
66+
return result;
67+
}
68+
4769
- (NSUInteger) levelDepth {
4870
NSUInteger cnt = 0;
4971
if (_parent != nil) {

‎UITreeView/UITreeView.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
- (NSInteger) numberOfRowsInTreeView:(UITreeView *)treeView;
1818
- (TreeNode *) treeView:(UITreeView *)treeView treeNodeForRow:(NSInteger)row;
1919
- (NSInteger) treeView:(UITreeView *)treeView rowForTreeNode:(TreeNode *)treeNode;
20+
- (void) treeView:(UITreeView *)treeView removeTreeNode:(TreeNode *)treeNode;
2021

2122
//@optional
2223
- (void) treeView:(UITreeView *)treeView didSelectForTreeNode:(TreeNode *)treeNode;

‎UITreeView/UITreeView.m‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,17 @@ - (BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *
8686
}
8787

8888
- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
89+
TreeNode *treeNode = [self treeNodeForIndexPath:indexPath];
8990
if (editingStyle == UITableViewCellEditingStyleDelete) {
90-
// Delete the row from the data source
91-
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
91+
if ([_treeViewDelegate respondsToSelector:@selector(treeView:removeTreeNode:)]) {
92+
[_treeViewDelegate treeView:self removeTreeNode:treeNode];
93+
}
94+
if (treeNode.isFolder && treeNode.expanded && treeNode.hasChildren) {
95+
[self reloadData];
96+
[self resetSelection];
97+
} else {
98+
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
99+
}
92100
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
93101
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
94102
}

‎demo/demo/ViewController.m‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ - (NSInteger) treeView:(UITreeView *)treeView rowForTreeNode:(TreeNode *)treeNod
3131
return [[_rootTreeNode visibleNodes] indexOfObject:treeNode];
3232
}
3333

34+
- (void) treeView:(UITreeView *)treeView removeTreeNode:(TreeNode *)treeNode {
35+
[_rootTreeNode removeTreeNode:treeNode];
36+
}
37+
3438
- (void) treeView:(UITreeView *)treeView didSelectForTreeNode:(TreeNode *)treeNode {
3539
NSLog(@"Node %@ selected", treeNode.title);
3640
}

0 commit comments

Comments
 (0)