From 2a39209aad1a74d41e46ece684b239635bd39410 Mon Sep 17 00:00:00 2001 From: c4tto Date: Mon, 23 Apr 2012 13:24:32 +0200 Subject: [PATCH] Issue #127 - The behavior of [delegate willSelectItemAtIndex:] is more similar to UITableView. 1) selection change can be refused in method by returning value NSNotFound. 2) deselection of previous selected item is made after calling willSelectItemAtIndex method, so it is possible to use gridView.indexOfSelectedItem 3) Grid view which isn't full and there is some free space under cells. If user tap to that space, both methods willSelect+didSelect are called and index value is NSNotFound. Fixed, methods aren't no more called. --- Classes/AQGridView.m | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Classes/AQGridView.m b/Classes/AQGridView.m index 134a109..b2550b8 100755 --- a/Classes/AQGridView.m +++ b/Classes/AQGridView.m @@ -1105,21 +1105,21 @@ - (void) _selectItemAtIndex: (NSUInteger) index animated: (BOOL) animated scrollPosition: (AQGridViewScrollPosition) position notifyDelegate: (BOOL) notifyDelegate numFingersTouch: (NSUInteger) numFingers { - if ( _selectedIndex == index ) - return; // already selected this item - - if ( _selectedIndex != NSNotFound ) - [self _deselectItemAtIndex: _selectedIndex animated: animated notifyDelegate: notifyDelegate]; + if ( index == NSNotFound || index == _selectedIndex || _flags.allowsSelection == 0 ) + return; + + if ( notifyDelegate && _flags.delegateWillSelectItem ) + index = [self.delegate gridView: self willSelectItemAtIndex: index]; - if ( _flags.allowsSelection == 0 ) - return; + if ( notifyDelegate && _flags.delegateWillSelectItemMultiTouch ) + index = [self.delegate gridView: self willSelectItemAtIndex: index + numFingersTouch: numFingers]; - if ( notifyDelegate && _flags.delegateWillSelectItem ) - index = [self.delegate gridView: self willSelectItemAtIndex: index]; + if ( index == NSNotFound || index == _selectedIndex ) + return; - if ( notifyDelegate && _flags.delegateWillSelectItemMultiTouch ) - index = [self.delegate gridView: self willSelectItemAtIndex: index - numFingersTouch:numFingers]; + if ( _selectedIndex != NSNotFound ) + [self _deselectItemAtIndex: _selectedIndex animated: animated notifyDelegate: notifyDelegate]; _selectedIndex = index; [[self cellForItemAtIndex: index] setSelected: YES animated: animated];