首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式设置UIWebViewDelegate

以编程方式设置UIWebViewDelegate
EN

Stack Overflow用户
提问于 2010-02-07 03:19:51
回答 2查看 7.4K关注 0票数 1

我正在尝试构建一个基于UIWebView的自定义控件,并将其编译到一个库中以供重用。当我将代码放在一个测试应用程序中时,一切都很正常,但是我在为库的视图设置一个委托时遇到了一些困难。值得注意的是,示例应用程序使用了接口生成器,因此委托是通过IB设置的。

NewsView.h:

代码语言:javascript
复制
@interface NewsView : UIWebView {
   NSObject<UIWebViewDelegate> *delegate;
}
@property (nonatomic, assign) IBOutlet NSObject<UIWebViewDelegate> *delegate;

在实现中,我的所有初始化方法都调用公共方法viewInit

NewsView.m

代码语言:javascript
复制
@implementation NewsView

@synthesize delegate;

- (void)viewInit {

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

如果用户单击视图中的标题之一,我需要委托来拦截点击并启动Safari。

NewsViewDelegate.h

代码语言:javascript
复制
@interface NewsViewDelegate : NSObject <UIWebViewDelegate> {
}

NewsViewDelegate.m

代码语言:javascript
复制
// 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;
}

不幸的是,shouldStartLoadWithRequest从来没有被调用,所以点击没有被外部启动。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-07 03:43:32

子类UIWebView通常是个坏主意,而文档专门建议不要这样做。我不确定,但我猜UIWebView是一个类集群。

为了达到您想要的效果,您可以尝试将您的NewsView变成普通的UIView,然后添加UIWebView作为子视图。在那里,您可以将UIWebView委托设置为NewsViewDelegate,而不必担心子类。

最好的方法可能是创建一个NewsViewController类,该类加载NewsView并实现UIWebViewDelegate方法本身,并将NewsView webView委托设置为NewsViewController。

票数 2
EN

Stack Overflow用户

发布于 2010-02-07 03:36:34

您正在跟踪webview的现有delegate属性。尝试在子类中不包含delegate属性。它应该继承下来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2215764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档