2010-02-23 12 views
9

siguiente situación:comprensión TTNavigator

en un TTTableViewController agregué algunas células con URL. están abriendo una clase con @"tt://photos" por ejemplo. esto funciona bastante bien.

Lo primero es que vi algunas URL en TT Ejemplos como @ "tt/photos/1". ¿Es posible obtener este "1" en mi clase de fotos y decir, por ejemplo, está bien, abra la imagen uno, o esta es solo otra URL que se declaró en TTNavigatior para abrir una clase específica?

la otra cosa es: ¿es posible reenviar un objeto a la clase vinculada? haciendo clic en una celda abre @ "tt: // photos" (la clase vinculada en mi TTNavigator)

trabajando con las tablas normales puedo sobrescribir mi método init y enviar un objeto con mi método de inicialización, esto también es posible haciendo clic mis TTItems?

gracias!

Respuesta

21

pensé que fuera a mí mismo, para aquellos que lo necesitan:

Primera (pasando "subURLs" en su mapa del navegador)

la navegación a una dirección URL con @ "tt: // fotos/firstphoto "es posible, se puede recuperar el "firstphoto" de esta manera:

//Prepare your Navigator Map like this 
[map from:@"tt://photos/(initWithNumber:)" toViewController:[PhotoVC class]]; 

En su PhotoVC se puede acceder a este número:

-(void) initWithNumber: (NSString*)number { 
    NSLog(@"%@",number); 
} 

de llamar al controlador de vista con esta URL sería:

PhotoVC* controller = [[PhotoVC alloc] initWithNumber:@"1"]; 
[navigationController pushViewController:controller animated:YES]; 
[controller release]; 

segundo lugar (los objetos que pasan en un TTTableViewController)

es un poco complicado, pero usted no tiene que nada subclase.

primera, nil de la URL en el TableItem

[TTTableLink itemWithText:@"TTTableLink" URL:nil] 

en su TTTableViewController escribir este método

- (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath { 
    TTURLAction *urlAction = [[[TTURLAction alloc] initWithURLPath:@"tt://photos"] autorelease]; 
    urlAction.query = [NSDictionary dictionaryWithObject:@"firstphoto" forKey:@"photo"]; 
    urlAction.animated = YES; 
    [[TTNavigator navigator] openURLAction:urlAction]; 
} 

ahora en su su PhotoVC necesita algo como esto

- (id)initWithNavigatorURL:(NSURL*)URL query:(NSDictionary*)query { 
    if (self = [super init]) { 
       NSLog(@"%@",query); 
} 

    return self; 
} 

y ha terminado;)

+0

Gracias por esto! –

+0

¡Impresionante! No estaba pasando nada en '[TTTableLink itemWithText: @" TTTableLink "URL: nil]'. Es estúpido que tengas que hacer eso, ya que ahora tengo que decirle manualmente a la celda que muestre la flecha derecha. –

+0

Choise, puede usar la URL como se esperaba. Vea mi respuesta a su pregunta. Cambié tu código para que sea compatible con TTNavigator. – Fa11enAngel

3

Intenté implementar la respuesta de Choise, aprendí mucho y, finalmente, tuve que mostrar los textos destacados y mantener la implementación con varias URL simples, así que esto es lo que hice.

  1. URL Mantener en el TableItem,

  2. Utilice este código en la subclase TTTableViewController.

    - (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath { 
    
         NSLog(@"Its url is %@", [object URL]); 
    
         TTURLAction *urlAction = [[[TTURLAction alloc] initWithURLPath:(NSString *)[object URL]] autorelease]; 
    
         urlAction.query = [NSDictionary dictionaryWithObject:self.user forKey:@"user"]; 
    
         urlAction.animated = YES; 
    
         [[TTNavigator navigator] openURLAction:urlAction]; 
    
    } 
    
    - (BOOL)shouldOpenURL:(NSString*)URL { 
    
        return NO; 
    
    } 
    
  3. Ese "shouldOpenURL:" fue descubierto mirando a través de TTTableViewController, lo probé, y funcionó. ¡Ahora la vista de tabla no está abriendo una vista duplicada, y hay rótulos!

Thanks choise!

+1

Sí, también descubrí esto de la manera difícil. Sobrescribir 'shouldOpenURL:' para devolver NO es una solución mucho mejor que pasar nil al parámetro URL del 'TTLinkedItem'. De esa forma, mantendrá las flechas correctas en las celdas de la vista de tabla. –

0

Aunque la respuesta de elección funciona para múltiples params cuando está creando TTURLAction en código, no es muy útil cuando desea incrustar enlaces para ver los controladores en su solución TTStyledLabel.One a eso es usar múltiples params en una sola cadena .

<a href='app://view2/param1=value1&param2=value2&...'>LabelName</a>

si desea que el código para analizar este tipo de URLs y obtener los parametros por favor no dude en enviarme un mensaje y le voy a enviar mis clases de analizadores sintácticos. (o puede construir el suyo con NSScanner!)

Tampoco se olvide de escapar de la & s de lo contrario TTStyledLabel no le gustaría!

+0

sí, también puedes usar params 'app-get ': // myviewcontroller? Foo = bar & lorem = ipsum' – choise

+0

tienes razón ... acabo de descubrir esa aplicación: // view2/-param1-param2-param3 - realmente no funciona ... TTNavigator lo convierte en 'http: // app: // view2/-param1-param2-param3-' ya que no se parece a una URL.Voy a editar esto ahora. – samyzee

0

No necesita ejecutar esto en la versión actual 1.0.6.2 para TTTableViewController. La opción "URL" está funcionando como se esperaba. Si no funciona para usted, su URL está rota o está llamando a la función incorrecta en su ViewController. La función a la que tiene que llamar a través de URL debe devolver un id. (Sea un constructor para un ViewController) de un ViewController. Entonces funcionará como se esperaba.

Voy a cambiar el formulario de ejemplo choise para que sea como TTNavigator espera que sea.

agregar una asignación, que TTNavigator utilizará para navegar:

//Prepare your Navigator Map like this 
[map from:@"tt://photos/(initWithNumber:)" toViewController:[PhotoVC class]]; 

Crear una TTTableLink (o TTStyledText, u otro) con un conjunto de direcciones URL, que debe mach su mapa:

[TTTableLink itemWithText:@"TTTableLink" URL:@"tt://photos/1"] 

Agregue esto a su PhotoVC a ser llamado por TTNavigator en la URL dada

-(id) initWithNumber: (NSString*)number { 
    if (self = [super init]) { 
     self.title = @"Some Title"; 

     NSLog(@"%@",number); 
    } 

    return self;  
} 

Usted no lo hace necesita para sobrescribir la función didSelectObject, como el TTNavigator llamará a su ViewController través función constructora definido tt: // fotos/(initWithNumber :)