Pregunta

Me presento una TTWebController como una vista modal utilizando este código:

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

Todo funciona muy bien, excepto que no hay un botón "Cerrar" en la TTWebController. Sé que esto es por lo general empujado desde un lado y le da un botón de "atrás", pero ¿hay una manera de añadir un botón de "cerrar" sin cavar en el código real Three20?

Actualización:

Este es el código que estoy usando para crear el texto y luego empujar el modal Ver en la pantalla. Quiero enviar de forma dinámica lo que se hace clic en el URL, en 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]];
¿Fue útil?

Solución

Es probable que lo que realmente quiere es su propio controlador de vista, ya sea que hereda de o contiene un TTWebController. Crear y asignar a ese lugar de la TTWebController prima, poner el botón siempre que te gusta y el alambre en el contacto en el interior de [self dismissModalViewControllerAnimated:YES]; Que debe hacer el truco.

EDIT:

Así que ahora usted tiene una vista web personalizada de tipo myWebView que estoy asumiendo que hereda de TTWebController. Eso es bueno. Dicho sea de paso, no se necesita realmente para inicializar una nueva instancia de ella sólo para obtener la clase, se puede hacer eso con sólo [myWebView class] porque el mensaje es la clase de la clase, no es el caso.

Sin embargo, a pesar de que se haya decidido a crear una nueva instancia utilizando un xib, no creo TTNavigator será instanciando la instancia de controlador en esa misma forma. En vez Creo que va a poner en marcha con este constructor (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;
}

Así que, en su aplicación hijo, usted puede proporcionar una versión personalizada de esta implementación de esta manera:

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

Yo no lo he probado, estaría interesado en ver lo que realmente está haciendo si no lo está haciendo. Si prefiere xibs (como yo, a diferencia de Three20), entonces usted tendrá que hacer un paso adicional de la carga de eso. Tengo una categoría en mi marco utilidad que ayuda con esto:

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

La parte objectAtIndex es porque todos xibs contienen una matriz, incluso si sólo hay una vista interior. Esto sólo devolverá el primer UIView en el XI ter.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top