From 1b946f475fb28d60e0aafc9ef394050c642c3a5b Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sun, 4 Jul 2010 16:33:49 -0600 Subject: [PATCH] [UI] Implement delegates and selectors for linked table items. This finally makes it possible to interact with Three20 table views without depending upon TTNavigator. --- src/Three20UI/Headers/TTTableLinkedItem.h | 11 +++++++++-- src/Three20UI/Headers/TTTableTextItem.h | 2 ++ src/Three20UI/Sources/TTTableLinkedItem.m | 11 ++++++++--- src/Three20UI/Sources/TTTableTextItem.m | 10 ++++++++++ src/Three20UI/Sources/TTTableViewDelegate.m | 3 +++ 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/Three20UI/Headers/TTTableLinkedItem.h b/src/Three20UI/Headers/TTTableLinkedItem.h index bb2d8f51b7..16a2bc99a8 100644 --- a/src/Three20UI/Headers/TTTableLinkedItem.h +++ b/src/Three20UI/Headers/TTTableLinkedItem.h @@ -18,11 +18,18 @@ #import "Three20UI/TTTableItem.h" @interface TTTableLinkedItem : TTTableItem { + // If a URL is specified, TTNavigator will be used. Otherwise, the delegate+selector will + // be invoked. NSString* _URL; NSString* _accessoryURL; + + id _delegate; + SEL _selector; } -@property (nonatomic, copy) NSString* URL; -@property (nonatomic, copy) NSString* accessoryURL; +@property (nonatomic, copy) NSString* URL; +@property (nonatomic, copy) NSString* accessoryURL; +@property (nonatomic, assign) id delegate; +@property (nonatomic, assign) SEL selector; @end diff --git a/src/Three20UI/Headers/TTTableTextItem.h b/src/Three20UI/Headers/TTTableTextItem.h index a227493fd5..8fc6db6e18 100644 --- a/src/Three20UI/Headers/TTTableTextItem.h +++ b/src/Three20UI/Headers/TTTableTextItem.h @@ -27,4 +27,6 @@ + (id)itemWithText:(NSString*)text URL:(NSString*)URL; + (id)itemWithText:(NSString*)text URL:(NSString*)URL accessoryURL:(NSString*)accessoryURL; ++ (id)itemWithText:(NSString*)text delegate:(id)delegate selector:(SEL)selector; + @end diff --git a/src/Three20UI/Sources/TTTableLinkedItem.m b/src/Three20UI/Sources/TTTableLinkedItem.m index cdd2b4015c..2e45559fda 100644 --- a/src/Three20UI/Sources/TTTableLinkedItem.m +++ b/src/Three20UI/Sources/TTTableLinkedItem.m @@ -27,12 +27,16 @@ @implementation TTTableLinkedItem @synthesize URL = _URL; @synthesize accessoryURL = _accessoryURL; +@synthesize delegate = _delegate; +@synthesize selector = _selector; /////////////////////////////////////////////////////////////////////////////////////////////////// - (void)dealloc { - TT_RELEASE_SAFELY(_URL); - TT_RELEASE_SAFELY(_accessoryURL); + self.URL = nil; + self.accessoryURL = nil; + self.delegate = nil; + self.selector = nil; [super dealloc]; } @@ -48,6 +52,7 @@ - (void)dealloc { - (id)initWithCoder:(NSCoder*)decoder { if (self = [super initWithCoder:decoder]) { self.URL = [decoder decodeObjectForKey:@"URL"]; + self.accessoryURL = [decoder decodeObjectForKey:@"accessoryURL"]; } return self; } @@ -60,7 +65,7 @@ - (void)encodeWithCoder:(NSCoder*)encoder { [encoder encodeObject:self.URL forKey:@"URL"]; } if (self.accessoryURL) { - [encoder encodeObject:self.accessoryURL forKey:@"URL"]; + [encoder encodeObject:self.accessoryURL forKey:@"accessoryURL"]; } } diff --git a/src/Three20UI/Sources/TTTableTextItem.m b/src/Three20UI/Sources/TTTableTextItem.m index 60c9451a9a..63c3feef0a 100644 --- a/src/Three20UI/Sources/TTTableTextItem.m +++ b/src/Three20UI/Sources/TTTableTextItem.m @@ -69,6 +69,16 @@ + (id)itemWithText:(NSString*)text URL:(NSString*)URL accessoryURL:(NSString*)ac } +/////////////////////////////////////////////////////////////////////////////////////////////////// ++ (id)itemWithText:(NSString*)text delegate:(id)delegate selector:(SEL)selector { + TTTableTextItem* item = [[[self alloc] init] autorelease]; + item.text = text; + item.delegate = delegate; + item.selector = selector; + return item; +} + + /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - diff --git a/src/Three20UI/Sources/TTTableViewDelegate.m b/src/Three20UI/Sources/TTTableViewDelegate.m index 95ca0ea9f1..d5f36b8d42 100644 --- a/src/Three20UI/Sources/TTTableViewDelegate.m +++ b/src/Three20UI/Sources/TTTableViewDelegate.m @@ -119,6 +119,9 @@ - (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*) TTTableLinkedItem* item = object; if (item.URL && [_controller shouldOpenURL:item.URL]) { TTOpenURL(item.URL); + + } else if (item.delegate && item.selector) { + [item.delegate performSelector:item.selector withObject:object]; } if ([object isKindOfClass:[TTTableButton class]]) {