إضافة زر "إغلاق" إلى ثلاثة20 TTWebController - iPhone
-
26-09-2019 - |
سؤال
أنا أقدم ttwebController كعرض مشروط باستخدام هذا الرمز:
TTNavigator* navigator = [TTNavigator navigator];
TTURLMap* map = navigator.URLMap;
[map from:@"*" toModalViewController:[TTWebController class]];
كل شيء يعمل بشكل رائع ، إلا أنه لا يوجد زر "إغلاق" على TTWebController. أعلم أن هذا يتم دفعه عادةً من الجانب وإعطاء زر "الخلفي" ، ولكن هل هناك طريقة لإضافة زر "إغلاق" دون الحفر في رمز الثلاثي الفعلي؟
تحديث:
فيما يلي الرمز الذي أستخدمه لإنشاء النص ثم اضغط على العرض المشروط على الشاشة. أرغب في إرسال ديناميكي أي عنوان URL ، بدلاً من "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]];
المحلول
ربما ما تريده بالفعل هو وحدة تحكم العرض الخاصة بك ، والتي ترث إما من أو تحتوي على 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.