РЕДАКТИРОВАТЬ : Я забыл , который изменился недавно ...
Предполагая, что вы зарегистрировали 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"
...
Удачи!:)