From e212e421c769f966d71292a8ba34b753c7f82c15 Mon Sep 17 00:00:00 2001 From: Steve Madsen Date: Thu, 19 Jun 2014 15:50:37 -0400 Subject: [PATCH] Handle nil return from willSelectRowForItem: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UITableView allows its matching delegate method to return nil and interprets this as “don’t change the selection”. Returning nil from RATreeViewDelegate doesn’t work the same. A nil return didn’t propagate up as nil, instead being transformed into a re-selection of the current item, with the corresponding delegate calls. --- RATreeView/RATreeView+TableViewDelegate.m | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/RATreeView/RATreeView+TableViewDelegate.m b/RATreeView/RATreeView+TableViewDelegate.m index 9ffadc2..c87b1a6 100644 --- a/RATreeView/RATreeView+TableViewDelegate.m +++ b/RATreeView/RATreeView+TableViewDelegate.m @@ -83,8 +83,12 @@ - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NS if ([self.delegate respondsToSelector:@selector(treeView:willSelectRowForItem:treeNodeInfo:)]) { RATreeNode *treeNode = [self treeNodeForIndex:indexPath.row]; id item = [self.delegate treeView:self willSelectRowForItem:treeNode.item treeNodeInfo:[treeNode treeNodeInfo]]; - NSIndexPath *delegateIndexPath = [self indexPathForItem:item]; - return delegateIndexPath.row == -1 ? indexPath : delegateIndexPath; + if (item) { + NSIndexPath *delegateIndexPath = [self indexPathForItem:item]; + return delegateIndexPath.row == -1 ? indexPath : delegateIndexPath; + } else { + return nil; + } } else { return indexPath; }