From 9365dce34c8ba4256bb7cb6ce11693f90404cccd Mon Sep 17 00:00:00 2001 From: Bay Phillips Date: Sat, 27 Sep 2014 15:16:32 -0400 Subject: [PATCH 1/2] Provide support for supplying a NSAttributedString for the token instead of a NSString. --- VENTokenField/VENToken.h | 1 + VENTokenField/VENToken.m | 11 +++++++++++ VENTokenField/VENTokenField.h | 1 + VENTokenField/VENTokenField.m | 24 +++++++++++++++++++++--- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/VENTokenField/VENToken.h b/VENTokenField/VENToken.h index 21768cb..b7d18b7 100644 --- a/VENTokenField/VENToken.h +++ b/VENTokenField/VENToken.h @@ -29,5 +29,6 @@ @property (strong, nonatomic) UIColor *colorScheme; - (void)setTitleText:(NSString *)text; +- (void)setAttributedTitleText:(NSAttributedString *)attributedTitleText; @end diff --git a/VENTokenField/VENToken.m b/VENTokenField/VENToken.m index 4435a83..55dd9ac 100644 --- a/VENTokenField/VENToken.m +++ b/VENTokenField/VENToken.m @@ -51,6 +51,17 @@ - (void)setUpInit - (void)setTitleText:(NSString *)text { self.titleLabel.text = text; + [self setText]; +} + +- (void)setAttributedTitleText:(NSAttributedString *)attributedTitleText +{ + self.titleLabel.attributedText = attributedTitleText; + [self setText]; +} + +- (void)setText +{ self.titleLabel.textColor = self.colorScheme; [self.titleLabel sizeToFit]; self.frame = CGRectMake(CGRectGetMinX(self.frame), CGRectGetMinY(self.frame), CGRectGetMaxX(self.titleLabel.frame) + 3, CGRectGetHeight(self.frame)); diff --git a/VENTokenField/VENTokenField.h b/VENTokenField/VENTokenField.h index 1288ef3..893f417 100644 --- a/VENTokenField/VENTokenField.h +++ b/VENTokenField/VENTokenField.h @@ -34,6 +34,7 @@ @protocol VENTokenFieldDataSource @optional - (NSString *)tokenField:(VENTokenField *)tokenField titleForTokenAtIndex:(NSUInteger)index; +- (NSAttributedString *)tokenField:(VENTokenField *)tokenField attributedTitleForTokenAtIndex:(NSUInteger)index; - (NSUInteger)numberOfTokensInTokenField:(VENTokenField *)tokenField; - (NSString *)tokenFieldCollapsedText:(VENTokenField *)tokenField; @end diff --git a/VENTokenField/VENTokenField.m b/VENTokenField/VENTokenField.m index e51040a..703bc0d 100644 --- a/VENTokenField/VENTokenField.m +++ b/VENTokenField/VENTokenField.m @@ -44,6 +44,7 @@ @interface VENTokenField () @property (strong, nonatomic) VENBackspaceTextField *inputTextField; @property (strong, nonatomic) UIColor *colorScheme; @property (strong, nonatomic) UILabel *collapsedLabel; +@property (nonatomic, readonly) BOOL isAttributedToken; @end @@ -248,7 +249,6 @@ - (void)layoutToLabelInView:(UIView *)view origin:(CGPoint)origin currentX:(CGFl - (void)layoutTokensWithCurrentX:(CGFloat *)currentX currentY:(CGFloat *)currentY { for (NSUInteger i = 0; i < [self numberOfTokens]; i++) { - NSString *title = [self titleForTokenAtIndex:i]; VENToken *token = [[VENToken alloc] init]; token.colorScheme = self.colorScheme; @@ -256,8 +256,13 @@ - (void)layoutTokensWithCurrentX:(CGFloat *)currentX currentY:(CGFloat *)current token.didTapTokenBlock = ^{ [self didTapToken:weakToken]; }; - - [token setTitleText:[NSString stringWithFormat:@"%@,", title]]; + + if ([self isAttributedToken]) { + [token setAttributedTitleText:[self attributedTitleForTokenAtIndex:i]]; + } else { + [token setTitleText:[NSString stringWithFormat:@"%@",[self titleForTokenAtIndex:i]]]; + } + [self.tokens addObject:token]; if (*currentX + token.width <= self.scrollView.contentSize.width) { // token fits in current line @@ -284,6 +289,11 @@ - (CGFloat)heightForToken return 30; } +- (BOOL)isAttributedToken +{ + return [self.dataSource respondsToSelector:@selector(tokenField:attributedTitleForTokenAtIndex:)]; +} + - (void)layoutInvisibleTextField { self.invisibleTextField = [[VENBackspaceTextField alloc] initWithFrame:CGRectZero]; @@ -429,6 +439,14 @@ - (NSString *)titleForTokenAtIndex:(NSUInteger)index return [NSString string]; } +- (NSAttributedString *)attributedTitleForTokenAtIndex:(NSUInteger)index +{ + if([self isAttributedToken]) { + return [self.dataSource tokenField:self attributedTitleForTokenAtIndex:index]; + } + return [NSAttributedString new]; +} + - (NSUInteger)numberOfTokens { if ([self.dataSource respondsToSelector:@selector(numberOfTokensInTokenField:)]) { From 0cf591f4ff5e86b9b5288452e7fc1ffe79ef5b45 Mon Sep 17 00:00:00 2001 From: Bay Phillips Date: Sat, 27 Sep 2014 15:44:21 -0400 Subject: [PATCH 2/2] Forgot to add the comma back in to the tokens --- VENTokenField/VENTokenField.m | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/VENTokenField/VENTokenField.m b/VENTokenField/VENTokenField.m index 703bc0d..7ffa2be 100644 --- a/VENTokenField/VENTokenField.m +++ b/VENTokenField/VENTokenField.m @@ -258,9 +258,15 @@ - (void)layoutTokensWithCurrentX:(CGFloat *)currentX currentY:(CGFloat *)current }; if ([self isAttributedToken]) { - [token setAttributedTitleText:[self attributedTitleForTokenAtIndex:i]]; + NSAttributedString *attributedString = [self attributedTitleForTokenAtIndex:i]; + NSRange range = NSMakeRange(0, attributedString.length); + attributedString = [[NSAttributedString alloc] + initWithString:[NSString stringWithFormat:@"%@,", attributedString.string] + attributes:[attributedString attributesAtIndex:0 effectiveRange:&range]]; + + [token setAttributedTitleText:attributedString]; } else { - [token setTitleText:[NSString stringWithFormat:@"%@",[self titleForTokenAtIndex:i]]]; + [token setTitleText:[NSString stringWithFormat:@"%@,",[self titleForTokenAtIndex:i]]]; } [self.tokens addObject:token];