Skip to content

Instantly share code, notes, and snippets.

@grinich
Created August 2, 2010 23:16
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save grinich/505495 to your computer and use it in GitHub Desktop.
Save grinich/505495 to your computer and use it in GitHub Desktop.
Passing objects in URLs via userInfo
//
// TTTableViewDelegate+URLAdditions.h
//
// Original work by Mike DeSaro of Prime31 Studios
// Gist created by Michael Grinich
@interface TTTableViewDelegate(URLAdditions)
@end
//
// TTTableViewDelegate+URLAdditions.m
//
// Original work by Mike DeSaro of Prime31 Studios
// Gist created by Michael Grinich
#import "TTTableViewDelegate+URLAdditions.h"
@implementation TTTableViewDelegate(URLAdditions)
- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
id<TTTableViewDataSource> dataSource = (id<TTTableViewDataSource>)tableView.dataSource;
id object = [dataSource tableView:tableView objectForRowAtIndexPath:indexPath];
// Added section to automatically wrap up any TTTableItem userInfo objects. If it is a dictionary, it gets sent directly
// If it is not, it is put in a dictionary and sent as they __userInfo__ key
if( [object isKindOfClass:[TTTableLinkedItem class]] ) {
TTTableLinkedItem* item = object;
if( item.URL && [_controller shouldOpenURL:item.URL] ) {
// If the TTTableItem has userInfo, wrap it up and send it along to the URL
if( item.userInfo ) {
NSDictionary *userInfoDict;
// If userInfo is a dictionary, pass it along else create a dictionary
if( [item.userInfo isKindOfClass:[NSDictionary class]] ) {
userInfoDict = item.userInfo;
} else {
userInfoDict = [NSDictionary dictionaryWithObject:item.userInfo forKey:@"__userInfo__"];
}
[[TTNavigator navigator] openURLAction:[[[TTURLAction actionWithURLPath:item.URL]
applyQuery:userInfoDict]
applyAnimated:YES]];
} else {
TTOpenURL( item.URL );
}
}
if( [object isKindOfClass:[TTTableButton class]] ) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
else if( [object isKindOfClass:[TTTableMoreButton class]] ) {
TTTableMoreButton* moreLink = (TTTableMoreButton*)object;
moreLink.isLoading = YES;
TTTableMoreButtonCell* cell
= (TTTableMoreButtonCell*)[tableView cellForRowAtIndexPath:indexPath];
cell.animating = YES;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if( moreLink.model )
[moreLink.model load:TTURLRequestCachePolicyDefault more:YES];
else
[_controller.model load:TTURLRequestCachePolicyDefault more:YES];
}
}
[_controller didSelectObject:object atIndexPath:indexPath];
}
@end
@grinich
Copy link
Author

grinich commented Aug 2, 2010

In your mapped view, use the following code to retrieve the userInfo object.

- (id)initWithNavigatorURL:(NSURL *)URL query:(NSDictionary *)query { 
    if (self = [self initWithNibName:nil bundle:nil]) {
        id myPassedObject = [query objectForKey:@"__userInfo__"];
        // do the rest of your initlization
    }
    return self;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment