Ben UIWebView metin aramak için çalışıyorum. Ben görünümü denetleyicisinden işlevini sesli arama yapamıyorum

oy
0

SearchWebView.h

#import <Foundation/Foundation.h>

@interface SearchWebView : UIWebView

- (NSInteger)highlightAllOccurencesOfString:(NSString*)str;
- (void)removeAllHighlights;
@end

SearchWebView.m

#import SearchWebView.h

@implementation SearchWebView

- (NSInteger)highlightAllOccurencesOfString:(NSString*)str
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@UIWebViewSearch ofType:@js];
    NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

    [self stringByEvaluatingJavaScriptFromString:jsCode];

    NSString *startSearch = [NSString stringWithFormat:@window.onload = function (){uiWebview_HighlightAllOccurencesOfString('%@')},str];
    [self stringByEvaluatingJavaScriptFromString:startSearch];

    NSString *result = [self stringByEvaluatingJavaScriptFromString:@uiWebview_SearchResultCount];
    return [result integerValue];
}

- (void)removeAllHighlights
{
    [self stringByEvaluatingJavaScriptFromString:@uiWebview_RemoveAllHighlights()];
}

@end

javascript aşağıdaki kodu içerir:

var uiWebview_SearchResultCount = 0;

function uiWebview_HighlightAllOccurencesOfStringForElement(element,keyword)        
{

if (element) {
    if (element.nodeType == 3) {        // Text node
        while (true) {
        //if (counter < 1) {
        var value = element.nodeValue;  // Search for keyword in text node
        var idx = value.toLowerCase().indexOf(keyword);

        if (idx < 0) break;             // not found, abort

        //(value.split);

        //we create a SPAN element for every parts of matched keywords
        var span = document.createElement(span);
        var text = document.createTextNode(value.substr(idx,keyword.length));
        span.appendChild(text);

        span.setAttribute(class,uiWebviewHighlight);
        span.style.backgroundColor=yellow;
        span.style.color=black;

        uiWebview_SearchResultCount++;    // update the counter

        text = document.createTextNode(value.substr(idx+keyword.length));
        element.deleteData(idx, value.length - idx);
        var next = element.nextSibling;
        element.parentNode.insertBefore(span, next);
        element.parentNode.insertBefore(text, next);
        element = text;
        window.scrollTo(0,span.offsetTop);

    }
} else if (element.nodeType == 1) { // Element node
    if (element.style.display != none && element.nodeName.toLowerCase() != 'select') {
            for (var i=element.childNodes.length-1; i>=0; i--) {
                uiWebview_HighlightAllOccurencesOfStringForElement(element.childNodes[i],keyword);
            }
        }
    }
}
}

// the main entry point to start the search
function uiWebview_HighlightAllOccurencesOfString(keyword) {

    uiWebview_RemoveAllHighlights();
    uiWebview_HighlightAllOccurencesOfStringForElement(document.body, keyword.toLowerCase());
}
// helper function, recursively removes the highlights in elements and their childs
function uiWebview_RemoveAllHighlightsForElement(element) {
if (element) {
    if (element.nodeType == 1) {
        if (element.getAttribute(class) == uiWebviewHighlight) {
            var text = element.removeChild(element.firstChild);
            element.parentNode.insertBefore(text,element);
            element.parentNode.removeChild(element);
            return true;
        } else {
            var normalize = false;
            for (var i=element.childNodes.length-1; i>=0; i--) {
                if (uiWebview_RemoveAllHighlightsForElement(element.childNodes[i])) {
                    normalize = true;
                }
            }
            if (normalize) {
                element.normalize();
            }
        }
    }
}
return false;
}
// the main entry point to remove the highlights
function uiWebview_RemoveAllHighlights() {
    uiWebview_SearchResultCount = 0;
    uiWebview_RemoveAllHighlightsForElement(document.body);
}

Bu gibi benim viewcontroller gelen aramaya çalışıyorum:

-(IBAction)searchButtonPressed:(id)sender{

[_webview highlightAllOccurencesOfString:@Bistritz];

}

Ama `istisna gösteriyor

UIWebView highlightAllOccurencesOfString:]: tanınmayan seçici örneği gönderildi.

Oluştur 01/07/2016 saat 04:18
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

Bağlandıktan beri bu oldu SearchWebViewbir karşı çıkış UIWebView.

Muhtemelen SearchWebViewbir sınıflandırma olduğu UIWebViewki burada highlightAllOccurencesOfString:yöntem, ilan ve tanımlanmıştır. Bu yöntem standart mevcut değildir UIWebView: böyle bir hata atıyor yüzden, tanınmayan seçici örneğine gönderilen .

Sen sınıfını değiştirmek gerekir UIWebViewiçin SearchWebViewarayüz oluşturucu.

  1. Kimlik müfettişi git
  2. senin WebView'ı seçin
  3. için UIWebView sınıfını değiştirme SearchWebView

kimlik denetiminde Sınıf değişikliği

Cevap 01/07/2016 saat 06:25
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more