gpt4 book ai didi

ios - 如何在 iOS 和 webviewdifinishload 上禁用超链接和复制/粘贴菜单未调用

转载 作者:行者123 更新时间:2023-12-01 17:09:27 25 4
gpt4 key购买 nike

我正在尝试禁用 iOS UIwebview 上的超链接和复制/粘贴菜单
所以我用谷歌搜索,有很多答案。
然后我遇到了另一个问题“未调用 webviewdidfinishload”
所以我添加我的代码来寻求你的帮助。 (我确定我正确连接了 IBOutlet)

另外,我仍然没有想到将 mainWebView.delegate = self 代替 self.mainWebView.delegate = self
谁能解释其中的区别?
所以我不确定我的其他功能,比如
[[[mainWebView subviews] lastObject] setScrollEnabled:YES]
[[[mainWebView subviews] 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]);
}

编辑
我使用了以下代码,但仍然无法正常工作...
这些都不行!!!!
- (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;
}

甚至这个
- (void)viewDidLoad {
mainWebView.delegate = self;
}
- (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';"];
}

这也是
- (void)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 {

}

请帮帮我..这让我疯了一个星期..

最佳答案

隐藏复制/粘贴菜单:

覆盖 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属性(property),否则,
@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];
}

这可能对您有帮助。

关于ios - 如何在 iOS 和 webviewdifinishload 上禁用超链接和复制/粘贴菜单未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786263/

25 4 0