Pergunta

Estou apresentando um TTWebController como uma visualização modal usando este código:

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

Tudo funciona muito bem, exceto que não há botão "fechar" no TTWebController. Eu sei que isso geralmente é empurrado do lado e recebe um botão "traseiro", mas existe uma maneira de adicionar um botão "fechar" sem cavar o código três20 reais?

Atualizar:

Aqui está o código que estou usando para criar o texto e, em seguida, empurre a exibição modal na tela. Quero enviar dinamicamente qualquer que o URL seja clicado, no lugar de "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]];
Foi útil?

Solução

Provavelmente, o que você realmente deseja é o seu próprio controlador de visualização, que herda ou contém um ttwebcontroller. Criar e mapear para isso em vez do bruto TTWebController, coloque o botão onde quiser e conecte o toque para dentro para [self dismissModalViewControllerAnimated:YES]; Isso deve fazer o truque.

EDITAR:

Então agora você tem uma visualização da web personalizada do tipo myWebView que estou assumindo herdar TTWebController. Isso é bom. Como um aparte, você realmente não precisa inicializar uma nova instância apenas para obter a aula, você pode fazer isso com apenas [myWebView class] Porque a mensagem da classe está na classe, não na instância.

No entanto, mesmo que você tenha decidido criar uma nova instância usando um XIB, não acho que o TTNavigator esteja instantando a instância do controlador da mesma maneira. Em vez disso, acredito que será lançado com este construtor (extraído de 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;
}

Portanto, na implementação do seu filho, você pode fornecer uma versão personalizada dessa implementação como assim:

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

Eu não testei, eu estaria interessado em ver o que realmente está fazendo se não estiver fazendo isso. Se você preferir o XIBS (como eu, ao contrário de três20), precisará fazer uma etapa extra para carregar isso. Eu tenho uma categoria na minha estrutura de utilitário que ajuda com isso:

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

o objectAtIndex A parte ocorre porque todos os XIBs contêm uma matriz, mesmo que haja apenas uma vista dentro. Isso apenas retornará o primeiro uiview no XIB.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top