Question

Je présente une TTWebController comme Voir Modal en utilisant ce code:

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

Tout fonctionne très bien, sauf qu'il n'y a pas de bouton « fermer » sur la TTWebController. Je sais que cela est généralement poussé de côté et donné un bouton « retour », mais est-il un moyen d'ajouter un bouton « fermer » sans creuser dans le code Three20 réelle?

Mise à jour:

Voici le code que j'utilise pour créer le texte, puis pousser la vue Modal sur l'écran. Je veux envoyer dynamiquement selon URL est cliqué, à la place 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]];
Était-ce utile?

La solution

Probablement ce que vous voulez réellement est votre propre contrôleur de vue, que soit hérite de ou contient un TTWebController. Créer et mapper qu'au lieu de la TTWebController cru, mettre le bouton où vous voulez et câbler le contact sur l'intérieur de [self dismissModalViewControllerAnimated:YES]; Cela devrait faire l'affaire.

EDIT:

Alors maintenant, vous avez une vue Web personnalisée de type myWebView que je suppose hérite de TTWebController. C'est bon. En aparté, vous n'avez pas vraiment besoin d'initialiser une nouvelle instance de juste pour obtenir la classe, vous pouvez le faire avec juste [myWebView class] parce que le message de classe est la classe, pas l'instance.

Cependant, même si vous avez décidé de créer une nouvelle instance en utilisant un xib, je ne pense pas TTNavigator sera instancié votre instance de contrôleur dans ce même façon. Au lieu de cela, je crois qu'il va lancer avec ce constructeur (extrait 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;
}

Alors, dans votre mise en œuvre de l'enfant, vous pouvez fournir une version personnalisée de cette mise en œuvre comme ceci:

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

Je l'ai pas testé, je serais intéressé à voir ce qu'il est en train de faire si elle ne le fait pas. Si vous préférez xibs (comme moi, à la différence Three20) alors vous aurez besoin de faire une étape supplémentaire de chargement qui. J'ai une catégorie dans mon cadre utilitaire qui aide à ceci:

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 partie objectAtIndex est parce que tous les xibs contiennent un tableau, même s'il n'y a qu'une seule vue de l'intérieur. Ce sera juste revenir le premier UIView dans le xib.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top