Three20 отображать локальный HTML-файл - PullRequest
1 голос
/ 04 июня 2011

Я пытаюсь отобразить локальный HTML-файл с контроллера таблицы Three20. Таблица отображается правильно, но когда я выбираю элемент, все, что я получаю, это пустой экран. Если я использую внешний URL, страница отображается правильно. Я не пробовал использовать UIWebView, но мне было интересно, есть ли простой способ использования платформы Three20.

Спасибо.

1 Ответ

2 голосов
/ 04 июня 2011

РЕДАКТИРОВАТЬ : Я забыл , который изменился недавно ...

Предполагая, что вы зарегистрировали TTWebController в вашем навигаторе таким образом:

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

Вы можете просто открыть локальный html-файл следующим образом:

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

Тогда все, что вам нужно, это добавить TTTableLinkedItem или подкласс (почти все ячейки TT *) к вашемуисточник данных с URL-адресом локального файла:

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

Намного проще, чем то, что я написал раньше ...

ENDOFEDIT

Забудьте, что под, если вы не заинтересованы в других решениях ... (более сложных ... или нет, смотрите последнее)


В основном, вот как вы загружаете контент в UIWebView:

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

three20 TTWebController может принять запрос в запросе:

- (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;
}

Таким образом, чтобы открыть локальный html-файл в TTWebController, вы можете сделать это:

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]];

Теперь последняя часть, чтобы вызвать это из TTTableViewController ... У вас есть в вашем ViewController реализовать:

- (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];
}

Надеюсь, что это поможет!Ничто из протестированного вообще не должно компилироваться или что бы то ни было, но это решение.

Это решение, использующее базовые три функции iOS +.Вы также можете написать TTCustomWebController, унаследованный от TTWebController, который будет принимать URL-адреса, такие как @"myapp://openLocalHtml?file=credits", что не так сложно сделать ...

... Вот черновик:

@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

Тогда вы можете просто использовать TTTableLinkedItem в своем источнике данных, указывая на эти @"myapp://openLocalHtml?file=credits" ...

Удачи!:)

...