From c78bce5ce78c80aad907bc1ff246aaa21e62fb80 Mon Sep 17 00:00:00 2001 From: Max Kramer Date: Thu, 27 Dec 2012 21:45:13 +0000 Subject: [PATCH] Implemented NSBlocks in lieu to the newly deprecated delegate methods --- STTweetLabel/STTweetLabel.h | 28 +++++- STTweetLabel/STTweetLabel.m | 20 ++++ .../UserInterfaceState.xcuserstate | Bin 0 -> 10965 bytes .../xcschemes/STTweetLabelExample.xcscheme | 86 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ .../STTweetLabelExample/STViewController.h | 4 +- .../STTweetLabelExample/STViewController.m | 30 +++++- 7 files changed, 180 insertions(+), 10 deletions(-) create mode 100644 STTweetLabelExample/STTweetLabelExample.xcodeproj/project.xcworkspace/xcuserdata/Max.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 STTweetLabelExample/STTweetLabelExample.xcodeproj/xcuserdata/Max.xcuserdatad/xcschemes/STTweetLabelExample.xcscheme create mode 100644 STTweetLabelExample/STTweetLabelExample.xcodeproj/xcuserdata/Max.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/STTweetLabel/STTweetLabel.h b/STTweetLabel/STTweetLabel.h index bfddbeb..9740f1f 100644 --- a/STTweetLabel/STTweetLabel.h +++ b/STTweetLabel/STTweetLabel.h @@ -8,15 +8,32 @@ #import +#define DEPRECATED __attribute__ ((deprecated)) + +typedef enum { + + STLinkActionTypeAccount, + STLinkActionTypeHashtag, + STLinkActionTypeWebsite + +} STLinkActionType; + +typedef void(^STLinkCallbackBlock)(STLinkActionType actionType, NSString *link); + +/* + * Deprecated Delegate Callbacks. + * Please use NSBlocks instead. +*/ + @protocol STLinkProtocol @optional -- (void)twitterAccountClicked:(NSString *)link; -- (void)twitterHashtagClicked:(NSString *)link; -- (void)websiteClicked:(NSString *)link; - +- (void)twitterAccountClicked:(NSString *)link DEPRECATED; +- (void)twitterHashtagClicked:(NSString *)link DEPRECATED; +- (void)websiteClicked:(NSString *)link DEPRECATED; @end + @interface STTweetLabel : UILabel { NSMutableArray *touchLocations; @@ -27,7 +44,8 @@ @property (nonatomic, strong) UIFont *fontHashtag; @property (nonatomic, strong) UIColor *colorLink; @property (nonatomic, strong) UIColor *colorHashtag; +@property (nonatomic, strong) id delegate DEPRECATED; -@property (nonatomic, strong) id delegate; +@property (nonatomic, copy) STLinkCallbackBlock callbackBlock; @end diff --git a/STTweetLabel/STTweetLabel.m b/STTweetLabel/STTweetLabel.m index a979a63..031d4be 100644 --- a/STTweetLabel/STTweetLabel.m +++ b/STTweetLabel/STTweetLabel.m @@ -160,6 +160,13 @@ if ([_delegate respondsToSelector:@selector(twitterAccountClicked:)]) { [_delegate twitterAccountClicked:url]; } + + if (_callbackBlock != NULL) { + + _callbackBlock(STLinkActionTypeAccount, url); + + } + } else if ([[touchWords objectAtIndex:idx] hasPrefix:@"#"]) { @@ -167,6 +174,12 @@ if ([_delegate respondsToSelector:@selector(twitterHashtagClicked:)]) { [_delegate twitterHashtagClicked:url]; } + + if (_callbackBlock != NULL) { + + _callbackBlock(STLinkActionTypeHashtag, url); + + } } else if ([[touchWords objectAtIndex:idx] hasPrefix:@"http"]) { @@ -175,6 +188,13 @@ if ([_delegate respondsToSelector:@selector(websiteClicked:)]) { [_delegate websiteClicked:url]; } + + if (_callbackBlock != NULL) { + + _callbackBlock(STLinkActionTypeWebsite, url); + + } + } } }]; diff --git a/STTweetLabelExample/STTweetLabelExample.xcodeproj/project.xcworkspace/xcuserdata/Max.xcuserdatad/UserInterfaceState.xcuserstate b/STTweetLabelExample/STTweetLabelExample.xcodeproj/project.xcworkspace/xcuserdata/Max.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..fe14c0dd6a36fe7ac19b5ce1b4e5b026336925b0 GIT binary patch literal 10965 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/STTweetLabelExample/STTweetLabelExample.xcodeproj/xcuserdata/Max.xcuserdatad/xcschemes/xcschememanagement.plist b/STTweetLabelExample/STTweetLabelExample.xcodeproj/xcuserdata/Max.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..0f97173 --- /dev/null +++ b/STTweetLabelExample/STTweetLabelExample.xcodeproj/xcuserdata/Max.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + STTweetLabelExample.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 254E4346167E7475004191B6 + + primary + + + + + diff --git a/STTweetLabelExample/STTweetLabelExample/STViewController.h b/STTweetLabelExample/STTweetLabelExample/STViewController.h index 20d5a91..3b60941 100755 --- a/STTweetLabelExample/STTweetLabelExample/STViewController.h +++ b/STTweetLabelExample/STTweetLabelExample/STViewController.h @@ -8,10 +8,8 @@ #import -#import "STTweetLabel.h" - @class STTweetLabel; -@interface STViewController : UIViewController +@interface STViewController : UIViewController @property (strong, nonatomic) STTweetLabel *tweetLabel; @property (strong, nonatomic) IBOutlet UILabel *displayLabel; diff --git a/STTweetLabelExample/STTweetLabelExample/STViewController.m b/STTweetLabelExample/STTweetLabelExample/STViewController.m index 98c72c6..9ac10bc 100755 --- a/STTweetLabelExample/STTweetLabelExample/STViewController.m +++ b/STTweetLabelExample/STTweetLabelExample/STViewController.m @@ -7,7 +7,6 @@ // #import "STViewController.h" - #import "STTweetLabel.h" @interface STViewController () @@ -33,9 +32,36 @@ [_tweetLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:17.0]]; [_tweetLabel setTextColor:[UIColor blackColor]]; - [_tweetLabel setDelegate:self]; [_tweetLabel setText:@"Hi. This is a new tool for @you! Developed by->@SebThiebaud for #iPhone #ObjC... ;-)\nMy GitHub page: https://t.co/pQXDoiYA"]; + + + STLinkCallbackBlock callbackBlock = ^(STLinkActionType actionType, NSString *link) { + + NSString *displayString = NULL; + + switch (actionType) { + + case STLinkActionTypeAccount: + displayString = [NSString stringWithFormat:@"Twitter account:\n%@", link]; + break; + + case STLinkActionTypeHashtag: + displayString = [NSString stringWithFormat:@"Twitter hashtag:\n%@", link]; + break; + + case STLinkActionTypeWebsite: + displayString = [NSString stringWithFormat:@"Website:\n%@", link]; + break; + } + + [_displayLabel setText:displayString]; + + }; + + [_tweetLabel setCallbackBlock:callbackBlock]; + [self.view addSubview:_tweetLabel]; + } - (void)didReceiveMemoryWarning