سؤال

أنا أقدم 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top