2013-02-09 44 views
2

我试图禁用超链接和复制/粘贴菜单在iOS UIwebview 所以我GOOGLE了,并有很多答案。 然后我遇到了另一个问题'webviewdidfinishload不叫' 所以我添加我的代码来问你的帮助。 (Iam确定我正确连接IBOutlet)如何禁用超链接和复制/粘贴菜单在iOS和webviewdidfinishload不叫

另外,我还没有想到把mainWebView.delegate = self而不是self.mainWebView.delegate = self 任何人都可以解释它们的区别吗? 所以IAM不知道我的其他功能,如 [[[mainWebView子视图] lastObject] setScrollEnabled:YES] [[[mainWebView子视图] lastObject] setScrollsToTop:NO]
mainWebView.scalesPageToFit = YES 这些工作或没有。

应该对iOS5的合作,ios6.1 谢谢

在.h文件中

@interface HRViewController : UIViewController <UIWebViewDelegate> 
{ 
    UIWebView *mainWebView; 
} 
@property (strong, nonatomic) IBOutlet UIWebView *mainWebView; 

@end 

在.m文件

@interface HRViewController() 

@end 

@implementation HRViewController 

@synthesize mainWebView; 

- (void)viewDidLoad 
{ 
    [self startWebView]; 
    [super viewDidLoad]; 
} 

- (void)startWebView 
{ 
    mainWebView.delegate = self; 

    [[[mainWebView subviews] lastObject] setScrollEnabled:YES]; 
    [[[mainWebView subviews] lastObject] setScrollsToTop:NO]; 
    mainWebView.scalesPageToFit = YES; 

    mainWebView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    mainWebView.scalesPageToFit = YES; 
    [self.view addSubview:self.mainWebView]; 

    NSURL *url = [NSURL URLWithString:/" @"http://www.mysite.com" "/]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    [mainWebView loadRequest:request]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)WebView { 
    NSLog(@"finish"); 

    [WebView stringByEvaluatingJavaScriptFromString: @"document.documentElement.style.webkitUserSelect='none';"]; 
    [WebView stringByEvaluatingJavaScriptFromString: @"document.documentElement.style.webkitTouchCallout='none';"]; 
} 

- (void)webViewDidStartLoad:(UIWebView *)mainWebView { 
    NSLog(@"start"); 
} 

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 
    NSLog(@"Error for WEBVIEW: %@", [error description]); 
} 

EDIED 我用下面的代码,但仍然无法正常工作... 没有这些d oesnt工作!!!!!

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    NSLog(@"canPerformAction: %@",NSStringFromSelector(action)); 
    if (action == @selector(copy:) || 
     action == @selector(paste:)|| 
     action == @selector(cut:)) { 
     return NO; 
    } 
    return NO; 
} 

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    UIMenuController *menuController = [UIMenuController sharedMenuController]; 
    if (menuController) { 
     [UIMenuController sharedMenuController].menuVisible = NO; 
    } 
    return NO; 
} 

甚至这个 - (无效)viewDidLoad中{ mainWebView.delegate =自我; }

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSLog(@"finish"); 
    // Disable user selection 
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"]; 
    // Disable callout 
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"]; 
} 

也在本 - (无效)viewDidLoad中{ [自长按:self.mainWebView]; }

- (void)longPress:(UIView *)webView { 
    UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress)]; 

    longPress.allowableMovement=100; 
    longPress.minimumPressDuration=0.3; 
    longPress.delaysTouchesBegan=YES; 
    longPress.cancelsTouchesInView=YES; 
    [webView addGestureRecognizer:longPress]; 
} 

// I just need this for the selector in the gesture recognizer. 
- (void)handleLongPress { 

} 

请帮我..它让我发疯,现在一个星期..

回答

-1

要隐藏复制/粘贴菜单:

覆盖的canPerformAction:withSender:方法返回NO为您不希望允许的操作:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    if (action == @selector(paste:)) 
     return NO; 

    if (action == @selector(select:)) 
     return NO; 

    if (action == @selector(selectAll:)) 
     return NO; 

    return [super canPerformAction:action withSender:sender]; 
} 

另一种方式:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    UIMenuController *menuController = [UIMenuController sharedMenuController]; 
    if (menuController) { 
     [UIMenuController sharedMenuController].menuVisible = NO; 
    } 
    return NO; 
} 

还要检查This link

要禁用超链接:

你可以得到答案从this site这个问题。

关于UIWebView

如果使用则ARC只写,

@property (strong, nonatomic) IBOutlet UIWebView *mainWebView; 

无需@synthesize的财产,其他明智的,

@interface HRViewController : UIViewController <UIWebViewDelegate> 
{ 
    UIWebView *mainWebView; 
} 

@property (nonatomic,retain) IBOutlet UIWebView *mainWebView; 

@end 

// .m file 

- (void)viewDidLoad 
{ 
    mainWebView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    mainWebView.scalesPageToFit = YES; 
    mainWebView.delegate = self; 

    [[[mainWebView subviews] lastObject] setScrollEnabled:YES]; 
    [[[mainWebView subviews] lastObject] setScrollsToTop:NO]; 
    mainWebView.scalesPageToFit = YES; 

    [self.view addSubview:self.mainWebView]; 

    NSURL *url = [NSURL URLWithString:@"http://www.mysite.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [mainWebView loadRequest:request]; 
} 

这可能是有益的为你。

+0

谢谢你的回答。不幸的是它仍然不适合我。我试了一下,但没有任何工作。我甚至禁用了长时间的压力,但没有奏效。添加javascript到CSS也没有工作..我不知道这个问题,但它使我疯狂..但一个进展是现在webViewDidFinishLoad被称为(nslog comfirmed。)addtional帮助需要 – 2013-02-13 08:43:44

+1

这不适用于UIWebViews,只有UITextViews。 – 2014-02-27 03:12:54