Domanda

che vi presento un TTWebController come modale View utilizzando questo codice:

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

Tutto grandi opere, se non che non esiste un pulsante "chiudi" sul TTWebController. So che questo è di solito spinto dal lato e dato un pulsante "indietro", ma c'è un modo per aggiungere un pulsante "Chiudi" senza scavare nel codice attuale Three20?

Aggiornamento:

Ecco il codice che sto usando per creare il testo e poi spingere la modale View sullo schermo. Voglio inviare in modo dinamico a seconda di quale URL viene cliccato, al posto di "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]];
È stato utile?

Soluzione

Probabilmente quello che realmente vuole è proprio controller della vista, che o eredita da oppure contiene un TTWebController. Creare e mappare tale posto del TTWebController grezzo, mettere il pulsante, ovunque ti piace e cablare l'on tocco dentro per [self dismissModalViewControllerAnimated:YES]; Questo dovrebbe fare il trucco.

EDIT:

Quindi, ora si ha una vista web personalizzato di tipo myWebView che io parto dal presupposto eredita da TTWebController. Quello è buono. Per inciso, non si ha realmente bisogno di inizializzare una nuova istanza di esso solo per ottenere la classe, è possibile farlo con solo [myWebView class] perché il messaggio di classe è sulla classe, non è l'istanza.

Tuttavia, anche se si è deciso di creare una nuova istanza utilizzando un XI ter, non credo TTNavigator verrà istanziare l'istanza del controller nello stesso modo. Invece io credo che lancerà con questo costruttore (estratto da 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;
}

Quindi, nell'implementazione del bambino, è possibile fornire una versione personalizzata di questa implementazione in questo modo:

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

Non ho provato, sarei interessato a vedere ciò che effettivamente sta facendo, se non sta facendo questo. Se si preferisce xibs (come me, a differenza Three20) allora avrete bisogno di fare un passo in più di carico che. Ho una categoria nel mio quadro di utilità che aiuta con questo:

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 perché tutti xibs contengono un array, anche se c'è solo una vista interna. Questa sarà solo la prima di ritorno UIView nel XI ter.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top