[ASCellNode] Final revisions to behavior of setSelected: & setHighlighted:

This commit is contained in:
Hannah Trosi
2016-07-05 17:47:00 -07:00
parent 61d7c093a1
commit 3994f2089c
5 changed files with 43 additions and 34 deletions

View File

@@ -46,4 +46,7 @@
*/
@property (nonatomic, weak) UIScrollView *scrollView;
- (void)__setSelectedFromUIKit:(BOOL)selected;
- (void)__setHighlightedFromUIKit:(BOOL)highlighted;
@end

View File

@@ -31,6 +31,7 @@
ASDisplayNodeDidLoadBlock _viewControllerDidLoadBlock;
ASDisplayNode *_viewControllerNode;
UIViewController *_viewController;
BOOL _suspendInteractionDelegate;
}
@end
@@ -182,16 +183,38 @@
{
if (_selected != selected) {
_selected = selected;
[_interactionDelegate nodeSelectedStateDidChange:self];
if (!_suspendInteractionDelegate) {
[_interactionDelegate nodeSelectedStateDidChange:self];
}
}
}
- (void)setHighlighted:(BOOL)highlighted
{
if (_highlighted != highlighted) {
_highlighted = highlighted;
_highlighted = highlighted;
if (!_suspendInteractionDelegate) {
[_interactionDelegate nodeHighlightedStateDidChange:self];
}
}
}
- (void)__setSelectedFromUIKit:(BOOL)selected;
{
if (selected != _selected) {
_suspendInteractionDelegate = YES;
self.selected = selected;
_suspendInteractionDelegate = NO;
}
}
- (void)__setHighlightedFromUIKit:(BOOL)highlighted;
{
if (highlighted != _highlighted) {
_suspendInteractionDelegate = YES;
self.highlighted = highlighted;
_suspendInteractionDelegate = NO;
}
}
- (BOOL)selected

View File

@@ -43,31 +43,23 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell";
{
_node = node;
if (node.selected != self.selected) {
node.selected = self.selected;
[node __setSelectedFromUIKit:self.selected];
}
if (node.highlighted != self.highlighted) {
node.highlighted = self.highlighted;
[node __setHighlightedFromUIKit:self.highlighted];
}
}
- (void)setSelected:(BOOL)selected
{
if (selected != self.selected) {
[super setSelected:selected];
}
if (selected != _node.selected) {
_node.selected = selected;
}
[super setSelected:selected];
[_node __setSelectedFromUIKit:selected];
}
- (void)setHighlighted:(BOOL)highlighted
{
if (highlighted != self.highlighted) {
[super setHighlighted:highlighted];
}
if (highlighted != _node.highlighted) {
_node.highlighted = highlighted;
}
[super setHighlighted:highlighted];
[_node __setHighlightedFromUIKit:highlighted];
}
- (void)prepareForReuse

View File

@@ -68,31 +68,23 @@ static NSString * const kCellReuseIdentifier = @"_ASTableViewCell";
{
_node = node;
if (node.selected != self.selected) {
node.selected = self.selected;
[node __setSelectedFromUIKit:self.selected];
}
if (node.highlighted != self.highlighted) {
node.highlighted = self.highlighted;
[node __setHighlightedFromUIKit:self.highlighted];
}
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if (selected != self.selected) {
[super setSelected:selected animated:animated];
}
if (selected != _node.selected) {
_node.selected = selected;
}
[super setSelected:selected animated:animated];
[_node __setSelectedFromUIKit:selected];
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
if (highlighted != self.highlighted) {
[super setHighlighted:highlighted animated:animated];
}
if (highlighted != _node.highlighted) {
_node.highlighted = highlighted;
}
[super setHighlighted:highlighted animated:animated];
[_node __setHighlightedFromUIKit:highlighted];
}
- (void)prepareForReuse

View File

@@ -179,9 +179,8 @@
[testController.collectionView deselectItemAtIndexPath:indexPath animated:NO];
XCTAssertTrue(node.isSelected == NO, @"Deselecting cell should update node selection.");
// selecting cell should select node
UICollectionViewCell *cell = [testController.collectionView cellForItemAtIndexPath:indexPath];
cell.selected = YES;
// select the cell again, scroll down and back up, and check that the state persisted
[testController.collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];
XCTAssertTrue(node.isSelected == YES, @"Selecting cell should update node selection.");
// reload cell (-prepareForReuse is called) & check that selected state is preserved
@@ -192,7 +191,7 @@
XCTAssertTrue(node.isSelected == YES, @"Reloaded cell should preserve state.");
// deselecting cell should deselect node
cell = [testController.collectionView cellForItemAtIndexPath:indexPath];
UICollectionViewCell *cell = [testController.collectionView cellForItemAtIndexPath:indexPath];
cell.selected = NO;
XCTAssertTrue(node.isSelected == NO, @"Deselecting cell should update node selection.");