سؤال

أحاول بناء عنصر تحكم مخصص بناء على UIWebView وتجميعها في مكتبة لإعادة استخدامها. كل شيء كان يعمل بشكل جيد فقط عندما كان لدي الكود معا في تطبيق اختبار واحد ولكني أواجه مشكلة في إعداد المندوب لعرض مكتبة. ملاحظة، استخدم تطبيق العينة باني الواجهة وبالتالي تم تعيين المفوض عبر IB.

NewsView.H:

@interface NewsView : UIWebView {
   NSObject<UIWebViewDelegate> *delegate;
}
@property (nonatomic, assign) IBOutlet NSObject<UIWebViewDelegate> *delegate;

في تنفيذ جميع أساليب التهيئة الخاصة بي استدعاء طريقة عرض طريقة شائعة

NewsView.m.

@implementation NewsView

@synthesize delegate;

- (void)viewInit {

    self.delegate = [[NewsViewDelegate alloc] init];
}

إذا نقر المستخدم على إحدى العناوين الرئيسية في الرأي، فأنا بحاجة إلى المفوض لاعتراض النقرات وإطلاق رحلات السفاري.

NewsViewdelegate.h.

@interface NewsViewDelegate : NSObject <UIWebViewDelegate> {
}

NewsViewdelegate.m.

// Intercept URL events
- (BOOL)webView:(UIWebView *)myWebView shouldStartLoadWithRequest:
    (NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSLog(@"URL Changed");
    // Check to see if this is a click event
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[request URL]            absoluteString]]];
            return NO;
    }

    return YES;
}

لسوء الحظ، يجب أن يتم استدعاء StartLoadwithrequest أبدا، وبالتالي لا يتم إطلاق النقرات خارجيا.

هل كانت مفيدة؟

المحلول

عادة ما تكون فكرة سيئة لعلم الفئة الفرعية UIWebView, والمستندات تنصح على وجه التحديد ضدها. لا أعرف بالتأكيد، لكن تخميني هو ذلك UIWebView هو كتلة فئة.

للحصول على التأثير الذي تريده، قد تحاول جعل الأخبار الخاص بك عادي UIView, ، ثم أضف UIWebView كعمل فرعي. من هناك، يمكنك تعيين مندوب UIWebView إلى NewsViewDelegate دون القلق بشأن الفئة الفرعية.

قد تكون أفضل طريقة لإنشاء فئة NewsViewController التي تقوم بتحميل الأخبار الخاصة بك وتنفذ UIWebViewDelegate أساليب نفسها وتعيين مفوض WebView NewsView إلى NewsViewController.

نصائح أخرى

أنت التظليل القائمة delegate خاصية WebView. حاول ببساطة عدم تضمين delegate الممتلكات في الفئة الفرعية الخاصة بك. يجب أن تكون موروثة.

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