2013-08-19 69 views
2

我有一個UIWebView加載一個HTML字符串,內容可以添加到使用Javascript。我如何知道什麼時候UIWebView被粘貼了?

有什麼方法可以知道什麼時候(文本或圖像)已被粘貼到網頁視圖中。

NSString *path = [[NSBundle mainBundle] pathForResource:@"htmlString" ofType:@"txt"]; 
NSString *htmlString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 
[self.ibWebView loadHTMLString:htmlString baseURL:nil]; 


- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *jsToEncloseInEditableContainer = [NSString stringWithFormat:@"function contentedited(e){window.location='mpscontentedited://' + e.keyCode;};(function() {var body = document.body;var contentContainer = document.createElement('div');contentContainer.id = 'content';contentContainer.setAttribute('contenteditable','true');contentContainer.style.fontFamily=' Helvetica';contentContainer.style.marginTop=\"15px\";contentContainer.onkeydown = contentedited;contentContainer.onpaste=contentedited;var node;while(node=body.firstChild) {contentContainer.appendChild(node);}body.appendChild(contentContainer);%@body=undefined;delete body;contentContainer=undefined;delete contentContainer;node=undefined;delete node;})();", @"contentContainer.focus();"]; 
    [self.ibWebView stringByEvaluatingJavaScriptFromString:jsToEncloseInEditableContainer]; 
} 

我試過重寫UIResponder的paste:方法,但它永遠不會被調用。

- (void)paste:(id)sender 
{ 
    NSLog(@"paste not called"); 
} 

我也試圖創建一個自定義菜單按鈕

UIMenuController *menu = [UIMenuController sharedMenuController]; 
UIMenuItem *item = [[UIMenuItem alloc] initWithTitle:@"Paste Custom" action:@selector(pasteCustom:)]; 
[menu setMenuItems:@[item]]; 
[menu setMenuVisible:YES]; 

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    if (action == @selector(pasteCustom:)) 
    { 
     return YES; 
    } 
    return [super canPerformAction:action withSender:sender]; 
} 

- (void)pasteCustom:(id)sender 
{ 
    NSLog(@"paste custom"); 
    [super paste:sender]; // --> calling this causes a crash (unrecognized selector sent to instance) 
} 

我在做什麼錯?

我想要知道什麼時候被粘貼,或者我想要一個自定義菜單按鈕,其行爲類似於默認的粘貼按鈕。

在此先感謝。

回答

3

鑄造不是魔術。

我再說一遍:鑄造不是魔術!

它不會改變對象的運行時類型。如果它沒有響應選擇器作爲UIWebView,它也不會將其作爲UIMenuItem作出響應。您必須使用JavaScript檢測事件並將您的JavaScript函數連接到Objective-C。使用onpaste JavaScript事件處理程序,然後執行類似描述的操作here

<!-- snippet from your HTML string --> 
<script type="text/javascript"> 

    function call_objc_paste(text) 
    { 
     window.location.href = "fakescheme://" + text; 
    } 

</script> 

<input type="text" onpaste="call_objc_paste(this.value);" /> 

// Objective-C code: 
webView.delegate = self; 
[webView loadHTMLString:htmlStr baseURL:nil]; 

- (BOOL)   webView:(UIWebView *)wv 
shouldStartLoadWithRequest:(NSURLRequest *)rq 
      navigationType:(UIWebViewNavigationType)navT 
{ 
    NSString *rqStr = rq.URL.absoluteString; 
    NSString *scheme = @"fakescheme://"; 
    if ([rqStr hasPrefix:scheme]) { 
     NSString *pastedText = [rqStr substringFromIndex:scheme.length]; 
     // potentially do somethin with pastedText, then 

     return NO; 
    } 

    // it's not our fake URL scheme, just normal navigation 
    return YES; 
} 
+0

Thanks! :)。有沒有辦法可以對圖像做同樣的事情? – vivek241

+0

@ vivek241出於好奇,如何粘貼圖像?哪個HTML元素用於那個? – 2013-08-19 17:50:41

+0

我正在尋找類似於iOS上的本機電子郵件應用程序的解決方案。 – vivek241

相關問題