Frage

Ich bin ein TTWebController als Modal-Ansicht mit diesem Code vor:

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

funktioniert alles super, außer, dass es kein „Schließen“ -Knopf auf dem TTWebController. Ich weiß, dass dies in der Regel von der Seite und da eine „Zurück“ -Taste gedrückt wird, aber gebe es eine Möglichkeit, eine Schaltfläche „Schließen“ hinzugefügt werden, ohne in den eigentlichen Three20 Code zu graben?

Update:

Hier ist der Code, dass ich den Text erstellen bin und dann den Modal Blick auf den Bildschirm drücken. Ich mag dynamisch schicken je nachdem, welche URL geklickt wird, anstelle von „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]];
War es hilfreich?

Lösung

Wahrscheinlich, was Sie wirklich wollen, ist Ihre eigene View-Controller, dass entweder erbt von oder eine TTWebController enthält. Erstellen und Karte, die anstelle der rohen TTWebController, legen Sie die Taste, wo immer Sie mögen und verdrahten die auf Touch-up innen nach [self dismissModalViewControllerAnimated:YES]; Das sollte den Trick tun.

EDIT:

So, jetzt haben Sie eine benutzerdefinierte Web-Ansicht vom Typ myWebView, dass ich erbt von TTWebController gehe davon aus. Das ist gut. Als Nebenwirkung, brauchen Sie nicht wirklich eine neue Instanz davon zu initialisieren, nur um die Klasse zu erhalten, können Sie das mit nur [myWebView class] tun, weil die Klasse Nachricht auf der Klasse, nicht der Fall.

Doch auch wenn Sie sich entschieden haben, eine neue Instanz mit einem xib zu schaffen, ich glaube nicht, TTNavigator Ihre Controller-Instanz in derselben Art und Weise wird instanziieren. Stattdessen halte ich es mit diesem Konstruktor starten wird (von TTWebController.m extrahiert)

- (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 eine angepasste Version dieser Implementierung bieten etwa so:

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

Ich habe es nicht getestet, würde ich daran interessiert sein zu sehen, was es tatsächlich tun, wenn sie das nicht tun wird. Wenn Sie xibs bevorzugen (wie ich, im Gegensatz zu three20), dann müssen Sie, dass ein zusätzlichen Schritt des Ladens tun. 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 ist, weil alle xibs ein Array enthalten, auch wenn es nur ein Blick nach innen ist. Dies wird nur die erste UIView in der xib zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top