Добавление кнопки «Закрыть» до трех20 TTWebController - iPhone
-
26-09-2019 - |
Вопрос
Я представляю 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.