2011-09-22 24 views
15

Tôi có UIWebView đơn giản với html đã tải. Tôi muốn hiển thị PopoverView trỏ đến văn bản đã chọn. Tôi có thể nhận được menuFrame của UIMenuController và sử dụng rect của nó, nhưng kết quả không chính xác ở các góc của màn hình như tôi cần. Tôi có thể tính toán kích thước màn hình và nhận được menuFrame rect và sau đó tôi có thể giả sử nơi lựa chọn có thể được tìm thấy, nhưng tôi muốn chính xác biết văn bản được chọn ở đâu. Thông thường có thể không?Cách nhận tọa độ (CGRect) cho văn bản đã chọn trong UIWebView?

Trả lời

15

Bạn có thể sử dụng hàm javascript getBoundingClientRect() trên đối tượng phạm vi của văn bản đã chọn. Đây là cách tôi làm điều đó:

function getRectForSelectedText() { 
    var selection = window.getSelection(); 
    var range = selection.getRangeAt(0); 
    var rect = range.getBoundingClientRect(); 
    return "{{" + rect.left + "," + rect.top + "}, {" + rect.width + "," + rect.height + "}}"; 
} 

và trong một thể loại trên UIWebView, bạn có thể sử dụng nó như ví dụ:

- (CGRect)rectForSelectedText{ 
    CGRect selectedTextFrame = CGRectFromString([self stringByEvaluatingJavaScriptFromString:@"getRectForSelectedText()"]); 
    return selectedTextFrame; 
} 
+0

Tôi đã thử nhưng nó sẽ trả về {(0,0), (0 , 0)} bạn có thể giúp tôi xin vui lòng – dineshprasanna

+1

Nếu chúng tôi đặt thuộc tính scalesPageToFit của UIWebView thì nó không hoạt động như mong đợi. Bất kỳ giải pháp khác cho cùng. – Girish

+0

có hoạt động với tệp pdf không? –

Các vấn đề liên quan