| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- //
- // SWUtilityButtonView.m
- // SWTableViewCell
- //
- // Created by Matt Bowman on 11/27/13.
- // Copyright (c) 2013 Chris Wendel. All rights reserved.
- //
- #import "SWUtilityButtonView.h"
- #import "SWUtilityButtonTapGestureRecognizer.h"
- @interface SWUtilityButtonView()
- @property (nonatomic, strong) NSLayoutConstraint *widthConstraint;
- @property (nonatomic, strong) NSMutableArray *buttonBackgroundColors;
- @end
- @implementation SWUtilityButtonView
- #pragma mark - SWUtilityButonView initializers
- - (id)initWithUtilityButtons:(NSArray *)utilityButtons parentCell:(SWTableViewCell *)parentCell utilityButtonSelector:(SEL)utilityButtonSelector
- {
- self = [self initWithFrame:CGRectZero utilityButtons:utilityButtons parentCell:parentCell utilityButtonSelector:utilityButtonSelector];
-
- return self;
- }
- - (id)initWithFrame:(CGRect)frame utilityButtons:(NSArray *)utilityButtons parentCell:(SWTableViewCell *)parentCell utilityButtonSelector:(SEL)utilityButtonSelector
- {
- self = [super initWithFrame:frame];
-
- if (self) {
- self.translatesAutoresizingMaskIntoConstraints = NO;
-
- self.widthConstraint = [NSLayoutConstraint constraintWithItem:self
- attribute:NSLayoutAttributeWidth
- relatedBy:NSLayoutRelationEqual
- toItem:nil
- attribute:NSLayoutAttributeNotAnAttribute
- multiplier:1.0
- constant:0.0]; // constant will be adjusted dynamically in -setUtilityButtons:.
- self.widthConstraint.priority = UILayoutPriorityDefaultHigh;
- [self addConstraint:self.widthConstraint];
-
- _parentCell = parentCell;
- self.utilityButtonSelector = utilityButtonSelector;
- self.utilityButtons = utilityButtons;
- }
-
- return self;
- }
- #pragma mark Populating utility buttons
- - (void)setUtilityButtons:(NSArray *)utilityButtons
- {
- // if no width specified, use the default width
- [self setUtilityButtons:utilityButtons WithButtonWidth:kUtilityButtonWidthDefault];
- }
- - (void)setUtilityButtons:(NSArray *)utilityButtons WithButtonWidth:(CGFloat)width
- {
- for (UIButton *button in _utilityButtons)
- {
- [button removeFromSuperview];
- }
-
- _utilityButtons = [utilityButtons copy];
-
- if (utilityButtons.count)
- {
- NSUInteger utilityButtonsCounter = 0;
- UIView *precedingView = nil;
-
- for (UIButton *button in _utilityButtons)
- {
- [self addSubview:button];
- button.translatesAutoresizingMaskIntoConstraints = NO;
-
- if (!precedingView)
- {
- // First button; pin it to the left edge.
- [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button]"
- options:0L
- metrics:nil
- views:NSDictionaryOfVariableBindings(button)]];
- }
- else
- {
- // Subsequent button; pin it to the right edge of the preceding one, with equal width.
- [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[precedingView][button(==precedingView)]"
- options:0L
- metrics:nil
- views:NSDictionaryOfVariableBindings(precedingView, button)]];
- }
-
- [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[button]|"
- options:0L
- metrics:nil
- views:NSDictionaryOfVariableBindings(button)]];
-
-
- SWUtilityButtonTapGestureRecognizer *utilityButtonTapGestureRecognizer = [[SWUtilityButtonTapGestureRecognizer alloc] initWithTarget:_parentCell action:_utilityButtonSelector];
- utilityButtonTapGestureRecognizer.buttonIndex = utilityButtonsCounter;
- [button addGestureRecognizer:utilityButtonTapGestureRecognizer];
-
- utilityButtonsCounter++;
- precedingView = button;
- }
-
- // Pin the last button to the right edge.
- [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[precedingView]|"
- options:0L
- metrics:nil
- views:NSDictionaryOfVariableBindings(precedingView)]];
- }
-
- self.widthConstraint.constant = (width * utilityButtons.count);
-
- [self setNeedsLayout];
-
- return;
- }
- #pragma mark -
- - (void)pushBackgroundColors
- {
- self.buttonBackgroundColors = [[NSMutableArray alloc] init];
-
- for (UIButton *button in self.utilityButtons)
- {
- [self.buttonBackgroundColors addObject:button.backgroundColor];
- }
- }
- - (void)popBackgroundColors
- {
- NSEnumerator *e = self.utilityButtons.objectEnumerator;
-
- for (UIColor *color in self.buttonBackgroundColors)
- {
- UIButton *button = [e nextObject];
- button.backgroundColor = color;
- }
-
- self.buttonBackgroundColors = nil;
- }
- @end
|