【问题标题】:UIWebview set delegate method in a classUIWebview在类中设置委托方法
【发布时间】:2014-11-07 08:02:21
【问题描述】:

如何在类中设置 UIWebView 的委托方法?

当我这样做的时候,应用程序就会崩溃。


@interface MineWebViewHandle : NSObject<UIWebViewDelegate>

@end

//.m

@implementation MineWebViewHandle

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *urlString = [[request URL] absoluteString];

    return YES;
}

- (void)webViewDidStartLoad:(UIWebView *)webView
{
    NSLog(@"did start load");
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"did finished ");
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"webview error:%@",[error localizedDescription]);
}

我用它:

    self.m_pWebView = [[UIWebView alloc] initWithFrame:CGRectZero];
    MineWebViewHandle *handle = [[MineWebViewHandle alloc]init];
    self.m_pWebView.delegate = handle;
    self.m_pWebView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.m_pWebView];

如何正确使用?

【问题讨论】:

  • 可以添加崩溃信息吗?
  • 你为什么要给你的 webview 零帧?也正如上面评论中提到的,你可以发布崩溃消息。

标签: ios objective-c uiwebview uiwebviewdelegate


【解决方案1】:

您的代理看起来像在 viewDidLoad 中创建,并在此发布结束时(置为 nil)。

您需要创建一个名为:MineWebViewHandle *handle 的属性。

在你的 viewController.h 中添加:

 @property (nonatomic,strong)MineWebViewHandle *handle;

并更改您的代码:

self.handle = [[MineWebViewHandle alloc]init];
self.m_pWebView.delegate = self. handle;

最好你的 webView 有尺寸,改变这个:

self.m_pWebView = [[UIWebView alloc] initWithFrame:self.view.frame];

【讨论】:

  • 谢谢!这对我有帮助!是的,我在 viewDidLoad 中做到了!但我认为在 ARC 中,“MineWebViewHandle *handle = [[MineWebViewHandle alloc]init]”句柄会有一个强项。为什么要发布它?
  • 无论一个对象有多大的优点,如果它的引用计数为零,这个对象就会被释放。问题是您的对象句柄有一个+1(分配),但在方法结束时收到一个-1,并被破坏。不过,如果您将其放在强大的属性中,则会添加另一个 +1。
【解决方案2】:

WebviewUIView,不是控制器。

请删除NSObject并添加UIview

@interface MineWebViewHandle : UIView
@end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多