Добавление кнопки «Закрыть» до трех20 TTWebController - iPhone

StackOverflow https://stackoverflow.com/questions/4616891

Вопрос

Я представляю TTWebController в качестве модального представления, используя этот код:

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

Все работает отлично, за исключением того, что на TTWebController. Я знаю, что это обычно толкнуло со стороны и дает кнопку «Назад», но есть ли способ добавить кнопку «Закрыть», не копаясь в реальный код Three20?

Обновлять:

Вот код, который я использую для создания текста, а затем нажимайте модальный вид на экран. Я хочу динамически отправлять, какой URL-адрес нажат, на месте «YourURLHE».

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]];
Это было полезно?

Решение

Вероятно, то, что вы на самом деле хотите, - это ваш собственный контроллер просмотра, что либо наследует или содержит TTWebController. Создавать и отображать это вместо сырья TTWebController, Поместите кнопку, куда бы вы ни понравились, и проторивайте на подзакозь внутрь [self dismissModalViewControllerAnimated:YES]; Это должно делать свое дело.

РЕДАКТИРОВАТЬ:

Так что теперь у вас есть пользовательский вид веб-вида типа myWebView что я предполагаю на наследства от TTWebController. Отказ Это хорошо. Кроме того, вам не нужно инициализировать новый экземпляр этого, чтобы получить класс, вы можете сделать это с просто [myWebView class] Потому что классное сообщение находится на классе, а не экземпляр.

Однако, даже если вы решили создать новый экземпляр с помощью XIB, я не думаю, что TTnavigator будет создавать экземпляр вашего контроллера таким же образом. Вместо этого я считаю, что это запустится с этим конструктором (извлечена из 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;
}

Итак, в вашей дочерней реализации вы можете предоставить индивидуальную версию этой реализации, как:

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

Я не проверял это, мне было интересно, увидев, что он на самом деле делает, если это не делает это. Если вы предпочитаете XIBS (например, я, в отличие от Three20), то вам нужно будет сделать дополнительный шаг загрузки. У меня есть категория в моей коммунальной структуре, которая помогает с этим:

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

То objectAtIndex Часть заключается в том, что все XIBS содержат массив, даже если внутри есть только один вид внутри. Это просто вернет первый UIVIEW в XIB.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top