Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ - (id)initWithFrame:(CGRect)frame
// Listen for the deleteBackward method from UIKeyInput protocol
- (void)deleteBackward
{
if ([self.delegate respondsToSelector:@selector(textFieldDidDeleteBackwards:)]) {
[self.delegate textFieldDidDeleteBackwards:self];
NSObject <CLBackspaceDetectingTextFieldDelegate> *delegate = self.delegate;
if ([delegate respondsToSelector:@selector(textFieldDidDeleteBackwards:)]) {
[delegate textFieldDidDeleteBackwards:self];
}
// Call super afterwards, so the -text property will return text
// prior to the delete
Expand Down
4 changes: 2 additions & 2 deletions CLTokenInputView/CLTokenInputView/CLToken.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ - (id)initWithDisplayText:(NSString *)displayText context:(NSObject *)context
{
self = [super init];
if (self) {
self.displayText = displayText;
self.displayText = [displayText copy];
self.context = context;
}
return self;
Expand All @@ -39,7 +39,7 @@ - (BOOL)isEqual:(id)object

- (NSUInteger)hash
{
return self.displayText.hash + self.context.hash;
return self.displayText.hash ^ self.context.hash;
}

@end
46 changes: 20 additions & 26 deletions CLTokenInputView/CLTokenInputView/CLTokenInputView.m
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ @interface CLTokenInputView () <CLBackspaceDetectingTextFieldDelegate, CLTokenVi

@implementation CLTokenInputView

- (void)commonInit
static void commonInit(CLTokenInputView *self)
{
self.textField = [[CLBackspaceDetectingTextField alloc] initWithFrame:self.bounds];
self.textField.backgroundColor = [UIColor clearColor];
Expand Down Expand Up @@ -67,14 +67,13 @@ - (void)commonInit
self.fieldLabel.hidden = YES;

self.intrinsicContentHeight = STANDARD_ROW_HEIGHT;
[self repositionViews];
}

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self commonInit];
commonInit(self);
}
return self;
}
Expand All @@ -83,7 +82,7 @@ - (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self commonInit];
commonInit(self);
}
return self;
}
Expand Down Expand Up @@ -132,7 +131,7 @@ - (void)addToken:(CLToken *)token
[self onTextFieldDidChange:self.textField];

[self updatePlaceholderTextVisibility];
[self repositionViews];
[self setNeedsLayout];
}

- (void)removeToken:(CLToken *)token
Expand All @@ -158,7 +157,7 @@ - (void)removeTokenAtIndex:(NSInteger)index
[self.delegate tokenInputView:self didRemoveToken:removedToken];
}
[self updatePlaceholderTextVisibility];
[self repositionViews];
[self setNeedsLayout];
}

- (NSArray *)allTokens
Expand All @@ -185,8 +184,10 @@ - (CLToken *)tokenizeTextfieldText

#pragma mark - Updating/Repositioning Views

- (void)repositionViews
- (void)layoutSubviews
{
[super layoutSubviews];

CGRect bounds = self.bounds;
CGFloat rightBoundary = CGRectGetWidth(bounds) - PADDING_RIGHT;
CGFloat firstLineRightBoundary = rightBoundary;
Expand All @@ -200,7 +201,7 @@ - (void)repositionViews
if (self.fieldView) {
CGRect fieldViewRect = self.fieldView.frame;
fieldViewRect.origin.x = curX + FIELD_MARGIN_X;
fieldViewRect.origin.y = curY + ((STANDARD_ROW_HEIGHT - CGRectGetHeight(fieldViewRect))/2.0);
fieldViewRect.origin.y = curY + ((STANDARD_ROW_HEIGHT - CGRectGetHeight(fieldViewRect))/(CGFloat)2);
self.fieldView.frame = fieldViewRect;

curX = CGRectGetMaxX(fieldViewRect) + FIELD_MARGIN_X;
Expand All @@ -210,7 +211,7 @@ - (void)repositionViews
if (!self.fieldLabel.hidden) {
CGRect fieldLabelRect = self.fieldLabel.frame;
fieldLabelRect.origin.x = curX + FIELD_MARGIN_X;
fieldLabelRect.origin.y = curY + ((STANDARD_ROW_HEIGHT-CGRectGetHeight(fieldLabelRect))/2.0);
fieldLabelRect.origin.y = curY + ((STANDARD_ROW_HEIGHT-CGRectGetHeight(fieldLabelRect))/(CGFloat)2);
self.fieldLabel.frame = fieldLabelRect;

curX = CGRectGetMaxX(fieldLabelRect) + FIELD_MARGIN_X;
Expand Down Expand Up @@ -242,7 +243,7 @@ - (void)repositionViews

tokenRect.origin.x = curX;
// Center our tokenView vertially within STANDARD_ROW_HEIGHT
tokenRect.origin.y = curY + ((STANDARD_ROW_HEIGHT-CGRectGetHeight(tokenRect))/2.0);
tokenRect.origin.y = curY + ((STANDARD_ROW_HEIGHT-CGRectGetHeight(tokenRect))/(CGFloat)2);
tokenView.frame = tokenRect;

curX = CGRectGetMaxX(tokenRect) + HSPACE;
Expand Down Expand Up @@ -290,13 +291,6 @@ - (void)updatePlaceholderTextVisibility
}


- (void)layoutSubviews
{
[super layoutSubviews];
[self repositionViews];
}


#pragma mark - CLBackspaceDetectingTextFieldDelegate

- (void)textFieldDidDeleteBackwards:(UITextField *)textField
Expand Down Expand Up @@ -476,7 +470,7 @@ - (void)endEditing

- (void)setFieldName:(NSString *)fieldName
{
if (_fieldName == fieldName) {
if ([_fieldName isEqualToString:fieldName]) {
return;
}
NSString *oldFieldName = _fieldName;
Expand All @@ -493,7 +487,7 @@ - (void)setFieldName:(NSString *)fieldName
}

if (oldFieldName == nil || ![oldFieldName isEqualToString:fieldName]) {
[self repositionViews];
[self setNeedsLayout];
}
}

Expand All @@ -509,15 +503,15 @@ - (void)setFieldView:(UIView *)fieldView
}
[_fieldView removeFromSuperview];
_fieldView = fieldView;
if (_fieldView != nil) {
[self addSubview:_fieldView];
if (fieldView != nil) {
[self addSubview:fieldView];
}
[self repositionViews];
[self setNeedsLayout];
}

- (void)setPlaceholderText:(NSString *)placeholderText
{
if (_placeholderText == placeholderText) {
if ([_placeholderText isEqualToString:placeholderText]) {
return;
}
_placeholderText = placeholderText;
Expand All @@ -532,10 +526,10 @@ - (void)setAccessoryView:(UIView *)accessoryView
[_accessoryView removeFromSuperview];
_accessoryView = accessoryView;

if (_accessoryView != nil) {
[self addSubview:_accessoryView];
if (accessoryView != nil) {
[self addSubview:accessoryView];
}
[self repositionViews];
[self setNeedsLayout];
}


Expand Down
24 changes: 10 additions & 14 deletions CLTokenInputView/CLTokenInputView/CLTokenView.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ - (id)initWithToken:(CLToken *)token font:(nullable UIFont *)font
{
self = [super initWithFrame:CGRectZero];
if (self) {
UIColor *tintColor = [UIColor colorWithRed:0.0823 green:0.4941 blue:0.9843 alpha:1.0];
UIColor *tintColor = [UIColor colorWithRed:0.0823f green:0.4941f blue:0.9843f alpha:1];
if ([self respondsToSelector:@selector(tintColor)]) {
tintColor = self.tintColor;
}
Expand Down Expand Up @@ -82,14 +82,14 @@ - (id)initWithToken:(CLToken *)token font:(nullable UIFont *)font
- (CGSize)intrinsicContentSize
{
CGSize labelIntrinsicSize = self.selectedLabel.intrinsicContentSize;
return CGSizeMake(labelIntrinsicSize.width+(2.0*PADDING_X), labelIntrinsicSize.height+(2.0*PADDING_Y));
return CGSizeMake(labelIntrinsicSize.width + ((CGFloat)2 * PADDING_X), labelIntrinsicSize.height + ((CGFloat)2 * PADDING_Y));
}

- (CGSize)sizeThatFits:(CGSize)size
{
CGSize fittingSize = CGSizeMake(size.width-(2.0*PADDING_X), size.height-(2.0*PADDING_Y));
CGSize fittingSize = CGSizeMake(size.width - ((CGFloat)2 * PADDING_X), size.height - ((CGFloat)2 * PADDING_Y));
CGSize labelSize = [self.selectedLabel sizeThatFits:fittingSize];
return CGSizeMake(labelSize.width+(2.0*PADDING_X), labelSize.height+(2.0*PADDING_Y));
return CGSizeMake(labelSize.width + ((CGFloat)2 * PADDING_X), labelSize.height + ((CGFloat)2 * PADDING_Y));
}


Expand Down Expand Up @@ -147,9 +147,9 @@ - (void)setSelected:(BOOL)selected animated:(BOOL)animated
} else if (!selected && self.isFirstResponder) {
[self resignFirstResponder];
}
CGFloat selectedAlpha = (_selected ? 1.0 : 0.0);
CGFloat selectedAlpha = (selected ? 1.0 : 0.0);
if (animated) {
if (_selected) {
if (selected) {
self.selectedBackgroundView.alpha = 0.0;
self.selectedBackgroundView.hidden = NO;
self.selectedLabel.alpha = 0.0;
Expand All @@ -159,14 +159,14 @@ - (void)setSelected:(BOOL)selected animated:(BOOL)animated
self.selectedBackgroundView.alpha = selectedAlpha;
self.selectedLabel.alpha = selectedAlpha;
} completion:^(BOOL finished) {
if (!_selected) {
if (!selected) {
self.selectedBackgroundView.hidden = YES;
self.selectedLabel.hidden = YES;
}
}];
} else {
self.selectedBackgroundView.hidden = !_selected;
self.selectedLabel.hidden = !_selected;
self.selectedBackgroundView.hidden = !selected;
self.selectedLabel.hidden = !selected;
}
}

Expand All @@ -177,11 +177,7 @@ - (void)setSelected:(BOOL)selected animated:(BOOL)animated
- (void)updateLabelAttributedText
{
// Configure for the token, unselected shows "[displayText]," and selected is "[displayText]"
NSString *format = UNSELECTED_LABEL_FORMAT;
if (self.hideUnselectedComma) {
format = UNSELECTED_LABEL_NO_COMMA_FORMAT;
}
NSString *labelString = [NSString stringWithFormat:format, self.displayText];
NSString *labelString = [NSString stringWithFormat:self.hideUnselectedComma ? UNSELECTED_LABEL_NO_COMMA_FORMAT : UNSELECTED_LABEL_FORMAT, self.displayText];
NSMutableAttributedString *attrString =
[[NSMutableAttributedString alloc] initWithString:labelString
attributes:@{NSFontAttributeName : self.label.font,
Expand Down