diff --git a/AsyncDisplayKit/ASButtonNode.mm b/AsyncDisplayKit/ASButtonNode.mm index 4532f61b7b..8a9bc8a060 100644 --- a/AsyncDisplayKit/ASButtonNode.mm +++ b/AsyncDisplayKit/ASButtonNode.mm @@ -21,16 +21,19 @@ NSAttributedString *_normalAttributedTitle; NSAttributedString *_highlightedAttributedTitle; NSAttributedString *_selectedAttributedTitle; + NSAttributedString *_selectedHighlightedAttributedTitle; NSAttributedString *_disabledAttributedTitle; UIImage *_normalImage; UIImage *_highlightedImage; UIImage *_selectedImage; + UIImage *_selectedHighlightedImage; UIImage *_disabledImage; UIImage *_normalBackgroundImage; UIImage *_highlightedBackgroundImage; UIImage *_selectedBackgroundImage; + UIImage *_selectedHighlightedBackgroundImage; UIImage *_disabledBackgroundImage; } @@ -136,6 +139,8 @@ UIImage *newImage; if (self.enabled == NO && _disabledImage) { newImage = _disabledImage; + } else if (self.highlighted && self.selected && _selectedHighlightedImage) { + newImage = _selectedHighlightedImage; } else if (self.highlighted && _highlightedImage) { newImage = _highlightedImage; } else if (self.selected && _selectedImage) { @@ -156,6 +161,8 @@ NSAttributedString *newTitle; if (self.enabled == NO && _disabledAttributedTitle) { newTitle = _disabledAttributedTitle; + } else if (self.highlighted && self.selected && _selectedHighlightedAttributedTitle) { + newTitle = _selectedHighlightedAttributedTitle; } else if (self.highlighted && _highlightedAttributedTitle) { newTitle = _highlightedAttributedTitle; } else if (self.selected && _selectedAttributedTitle) { @@ -177,6 +184,8 @@ UIImage *newImage; if (self.enabled == NO && _disabledBackgroundImage) { newImage = _disabledBackgroundImage; + } else if (self.highlighted && self.selected && _selectedHighlightedBackgroundImage) { + newImage = _selectedHighlightedBackgroundImage; } else if (self.highlighted && _highlightedBackgroundImage) { newImage = _highlightedBackgroundImage; } else if (self.selected && _selectedBackgroundImage) { @@ -283,6 +292,9 @@ case ASControlStateSelected: return _selectedAttributedTitle; + + case ASControlStateSelected | ASControlStateHighlighted: + return _selectedHighlightedAttributedTitle; case ASControlStateDisabled: return _disabledAttributedTitle; @@ -307,6 +319,10 @@ case ASControlStateSelected: _selectedAttributedTitle = [title copy]; break; + + case ASControlStateSelected | ASControlStateHighlighted: + _selectedHighlightedAttributedTitle = [title copy]; + break; case ASControlStateDisabled: _disabledAttributedTitle = [title copy]; @@ -331,6 +347,9 @@ case ASControlStateSelected: return _selectedImage; + case ASControlStateSelected | ASControlStateHighlighted: + return _selectedHighlightedImage; + case ASControlStateDisabled: return _disabledImage; @@ -354,7 +373,11 @@ case ASControlStateSelected: _selectedImage = image; break; - + + case ASControlStateSelected | ASControlStateHighlighted: + _selectedHighlightedImage = image; + break; + case ASControlStateDisabled: _disabledImage = image; break; @@ -365,6 +388,30 @@ [self updateImage]; } +- (UIImage *)backgroundImageForState:(ASControlState)state +{ + ASDN::MutexLocker l(_propertyLock); + switch (state) { + case ASControlStateNormal: + return _normalBackgroundImage; + + case ASControlStateHighlighted: + return _highlightedBackgroundImage; + + case ASControlStateSelected: + return _selectedBackgroundImage; + + case ASControlStateSelected | ASControlStateHighlighted: + return _selectedHighlightedBackgroundImage; + + case ASControlStateDisabled: + return _disabledBackgroundImage; + + default: + return _normalBackgroundImage; + } +} + - (void)setBackgroundImage:(UIImage *)image forState:(ASControlState)state { ASDN::MutexLocker l(_propertyLock); @@ -380,6 +427,10 @@ case ASControlStateSelected: _selectedBackgroundImage = image; break; + + case ASControlStateSelected | ASControlStateHighlighted: + _selectedHighlightedBackgroundImage = image; + break; case ASControlStateDisabled: _disabledBackgroundImage = image; @@ -391,28 +442,6 @@ [self updateBackgroundImage]; } -- (UIImage *)backgroundImageForState:(ASControlState)state -{ - ASDN::MutexLocker l(_propertyLock); - switch (state) { - case ASControlStateNormal: - return _normalBackgroundImage; - - case ASControlStateHighlighted: - return _highlightedBackgroundImage; - - case ASControlStateSelected: - return _selectedBackgroundImage; - - case ASControlStateDisabled: - return _disabledBackgroundImage; - - default: - return _normalBackgroundImage; - } - -} - - (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize { UIEdgeInsets contentEdgeInsets;