2011-01-06 2 views
0

Я представляя TTWebController как модальный View с помощью этого кода:Добавление «закрыть» кнопку для Three20 TTWebController - iPhone

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

Все прекрасно работает, за исключением того, что нет «закрыть» кнопку на TTWebController , Я знаю, что это обычно выталкивают со стороны и дают кнопку «назад», но есть ли способ добавить кнопку «закрыть», не копаясь в фактическом коде Three20?

Update:

Вот код, который я использую, чтобы создать текст, а затем нажмите модальный View на экран. Я хочу динамически отправлять любой URL-адрес, вместо «YourUrlHere».

CGRect frame = CGRectMake(100, 100, 200, 200); 
TTStyledTextLabel* label = [[[TTStyledTextLabel alloc] initWithFrame:frame] autorelease]; 
NSString* labelText = @"http://www.yahoo.com http://www.google.com http://www.test.com"; 
label.text = [TTStyledText textFromXHTML:labelText lineBreaks:NO URLs:YES]; 
[self.view addSubview:label]; 

TTNavigator* navigator = [TTNavigator navigator]; 
TTURLMap* map = navigator.URLMap; 
myWebView *newViewController = [[myWebView alloc] initWithNibName:@"TTStyledTextLabelWebView" bundle:nil incomingURL:[NSString stringWithString:@"http://www.YourUrlHere.com"]]; 
[map from:@"*" toModalViewController:[newViewController class]]; 
+0

Это сопоставление выглядит неправильно, вы действительно хотите использовать *? – slf

+0

да ... ссылка работает и открывается модальный вид. Проблема заключается в том, что TTWebController не имеет кнопки «закрыть». – Chris

ответ

1

Возможно, что вы действительно хотите, это ваш собственный контроллер вида, который либо наследует, либо содержит TTWebController. Создайте и сопоставьте с этим, а не с необработанным TTWebController, поместите кнопку, где хотите, и подключите ее вверх до [self dismissModalViewControllerAnimated:YES];. Это должно сделать трюк.

EDIT:

Так что теперь у вас есть пользовательский веб-представление типа myWebView, что я предполагаю, унаследован от TTWebController. Это хорошо. В стороне, вам действительно не нужно инициализировать новый экземпляр этого только для того, чтобы получить класс, вы можете сделать это только с [myWebView class], потому что сообщение класса находится в классе, а не в экземпляре.

Однако, несмотря на то, что вы решили создать новый экземпляр с помощью xib, я не думаю, что TTNavigator будет создавать экземпляр вашего контроллера таким же образом. Вместо этого я считаю, что это будет запущен с помощью этого конструктора (извлеченных из TTWebController.m)

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

Итак, в вашей реализации ребенка, вы можете предоставить настроенную версию этой реализации следующим образом:

- (id)initWithNavigatorURL:(NSURL*)URL query:(NSDictionary*)query { 
    if (self = [super initWithNavigatorURL:URL query:query]) { 
    // code that creates a button and puts it somewhere 
    } 
    return self; 
} 

I не проверял его, мне было бы интересно увидеть, что он на самом деле делает, если он этого не делает. Если вы предпочитаете xibs (например, я, в отличие от трех20), вам нужно сделать дополнительный шаг по загрузке. У меня есть категория в моей полезной структуры, которая помогает с этим:

NSBundle + LoadNibView.h

#import <Foundation/Foundation.h> 

@interface NSBundle(LoadNibView) 

+ (id) loadNibView:(NSString*)className; 

@end 

NSBundle + LoadNibView.m

#import "NSBundle+LoadNibView.h" 

@implementation NSBundle(LoadNibView) 

+ (id) loadNibView:(NSString*)className 
{ 
    return [[[NSBundle mainBundle] loadNibNamed:className owner:nil options:nil] objectAtIndex:0]; 
} 

@end 

objectAtIndex часть, потому что все xibs содержат массив, даже если внутри есть только один вид. Это просто вернет первый UIView в xib.

+0

Но как передать переданную ссылку на WebView? Я использовал TTWebController, потому что, похоже, нет способа извлечь URL-адрес и передать его другому виду. – Chris

+0

Если я правильно понимаю, что вы делаете, вы уже настроили навигатор и карту.TTNavigator передает вам информацию. – slf

+0

Если вы просто хотите извлечь URL-адрес, я уверен, что есть способы сделать это, но вам нужно будет опубликовать еще один код – slf

 Смежные вопросы

  • Нет связанных вопросов^_^