2011-01-06 4 views
0

Ich präsentiere eine TTWebController als Modal-Ansicht mit diesem Code:eine Schaltfläche „Schließen“ zu Three20 TTWebController Hinzufügen - iPhone

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

Alles funktioniert gut, außer, dass es keinen „close“ ist Taste auf der TTWebController . Ich weiß, dass dies normalerweise von der Seite geschoben wird und einen "Zurück" -Knopf hat, aber gibt es eine Möglichkeit, einen "Schließen" -Knopf hinzuzufügen, ohne den eigentlichen Three20-Code zu untersuchen?

Update:

Hier ist der Code, den ich den Text erstellen bin und dann den Modal Blick auf den Bildschirm drücken. Ich möchte anstelle von "YourUrlHere" die URL, auf die geklickt wird, dynamisch senden.

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

Das Mapping sieht falsch aus, willst du wirklich *? – slf

+0

ja ... die Verbindung funktioniert und öffnet die modale Ansicht. Das Problem ist, dass der TTWebController keine "Schließen" -Schaltfläche hat. – Chris

Antwort

1

Wahrscheinlich, was Sie eigentlich wollen, ist Ihr eigener View-Controller, der entweder von TTWebController erbt oder einen enthält. Erstellen und ordnen Sie das anstelle der rohen TTWebController, setzen Sie die Taste, wo immer Sie möchten und verdrahten Sie die on touch up nach innen Das sollte den Trick tun.

EDIT:

So, jetzt haben Sie eine benutzerdefinierte Web-Ansicht vom Typ myWebView, die ich erbt von TTWebController gehe davon aus. Das ist gut. Nebenbei, Sie müssen nicht wirklich eine neue Instanz davon initialisieren, nur um die Klasse zu bekommen, Sie können das mit nur [myWebView class] tun, weil die Klassennachricht in der Klasse ist, nicht in der Instanz.

Obwohl Sie sich entschieden haben, eine neue Instanz mit einem xib zu erstellen, glaube ich nicht, dass TTNavigator Ihre Controller-Instanz auf diese Weise instanziiert. Stattdessen halte ich es mit diesem Konstruktor starten wird (extrahiert aus 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; 
} 

Also, in Ihrem Kind Implementierung können Sie wie so eine angepasste Version dieser Implementierung bieten:

- (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 Ich habe es nicht getestet, ich wäre daran interessiert zu sehen, was es eigentlich macht, wenn es das nicht tut. Wenn Sie xibs bevorzugen (wie ich, im Gegensatz zu three20), müssen Sie einen zusätzlichen Schritt tun, um das zu laden. Ich habe eine Kategorie in meinem Utility-Framework, das mit diesem hilft:

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 

Der objectAtIndex Teil, weil ist Alle XIBs enthalten ein Array, auch wenn nur eine Ansicht vorhanden ist. Dies wird nur die erste UIView in der Xib zurückgeben.

+0

Aber wie gebe ich die abgetippte Link-Information an das WebView weiter? Ich benutzte TTWebController, weil es anscheinend keine Möglichkeit gibt, die URL zu extrahieren und sie an eine andere Ansicht weiterzugeben. – Chris

+0

Wenn ich richtig verstehe, was Sie tun, haben Sie den Navigator und die Karte bereits eingerichtet.TTNavigator übergibt die Informationen für Sie. – slf

+0

Wenn Sie nur die URL extrahieren möchten, bin ich mir sicher, dass es auch Möglichkeiten gibt, aber Sie müssen etwas mehr Code schreiben – slf

Verwandte Themen