开发者

Three20 display local html file

I'm trying to display a local html file from a three20 table开发者_StackOverflow中文版 controller. The table shows up correctly, but when I select the item, all I get is a blank screen. If I use an external URL, the page shows correctly. I haven't tried using UIWebView, but I was wondering if there was an easy way using the Three20 framework.

Thanks.


EDIT: I forgot that has changed recently...

Assuming you have registered a TTWebController in your navigator that way :

TTNavigator* navigator = [TTNavigator navigator];
TTURLMap* map = navigator.URLMap;
[map from:@"*" toViewController:[TTWebController class]];

You can simply open a local html file that way :

NSString *creditsPath = [[NSBundle mainBundle] pathForResource:@"credits" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:creditsPath];
TTOpenURL([url description]);

Then all you have to to is to add TTTableLinkedItem or subclass (almost all of TT*Cell are) to your dataSource with a local file URL like that :

NSString *creditsPath = [[NSBundle mainBundle] pathForResource:@"credits" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:creditsPath];
TTTableTextItem *item = [TTTableTextItem itemWithText:@"foobar" URL:[url description]];

Much simpler that what I wrote before...

ENDOFEDIT

Forget whats under, unless you're interested in others solutions... (more complex... or not, see last one)


Basically here is how you load content in a UIWebView :

NSString *creditsPath = [[NSBundle mainBundle] pathForResource:@"credits" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:creditsPath];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView loadRequest:urlRequest];

The three20 TTWebController can take a request in a query :

- (id)initWithNavigatorURL:(NSURL*)URL query:(NSDictionary*)query {
  if (self = [self initWithNibName:nil bundle:nil]) {
    NSURLRequest* request = [query objectForKey:@"request"];
    if (nil != request) {
      [self openRequest:request];
    } else {
      [self openURL:URL];
    }
  }
  return self;
}

So to open a local html file in a TTWebController you could do this :

NSString *creditsPath = [[NSBundle mainBundle] pathForResource:@"credits" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:creditsPath];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[[TTNavigator navigator] openURLAction:
 [[[TTURLAction actionWithURLPath:@"url://to/your/ttwebcontroller"]
   applyQuery:[NSDictionary dictionaryWithObject:ulrRequest
                                          forKey:@"request"]]
  applyAnimated:YES]];

Now the last part, to trigger this from a TTTableViewController... You have in your ViewController to implement :

- (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath {
  // there you retrieve a *TTTableItem* corresponding to your row
  // and call previous snippet from URL...
  // TTTableItem class has userInfo property you could use:
  TTTableItem *item = (TTTableItem *)object;
  NSString *htmlFile = item.userInfo.
  [self openLocalHtmlFile:htmlFile];
}

Hope that helps! Nothing tested, at all, should not compile or whatsoever, but that is a solution.

That's a solution using basic three20 + iOS features. You could also write a TTCustomWebController inheriting from TTWebController that would take urls like @"myapp://openLocalHtml?file=credits" that's not that hard to do...

...That here is a draft :

@interface TTCustomWebController : TTWebController {}
@end

@implementation TTCustomWebController

- (id)initWithFile:(NSString *)name {
  self = [super init];
  if (self) {
    NSString *filePath = [[NSBundle mainBundle] pathForResource:name ofType:@"html"];
    NSURL *URL = [NSURL fileURLWithPath:filePath];
    [self openURL:URL];
  }
  return self;
}

@end

Then you could simply use TTTableLinkedItem in your datasource pointing to these @"myapp://openLocalHtml?file=credits"...

Good luck! :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜