2011-03-02 34 views
13

Có cách nào để tạo một UIWebView cuộn lên trên cùng khi tôi chạm vào nói một UISearchView trong cùng một viewController (không sử dụng Javascript).Làm cách nào để làm cho UIWebView cuộn lên đầu?

Something như thế này:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
     [myWebView scrollToTop]; //pseudocode 

} 

Nói cách khác, những gì xảy ra khi tôi chạm vào thanh trên cùng cũng có thể xảy ra theo chương trình.

Trả lời

5

Nếu bạn không muốn sử dụng JavaScript, không có phương pháp API công khai nào để thực hiện việc này. UIWebViews không kế thừa từ chế độ xem cuộn, do đó bạn không thể sử dụng bất kỳ phương pháp thông thường nào. Như bạn đã tìm ra, có thể thực hiện với JavaScript. Bạn có thể thử tìm khung nhìn cuộn thực tế trong UIWebView, nhưng tất cả đều không có giấy tờ và không thực sự là một điều tốt để làm trong một ứng dụng sản xuất.

Cập nhật - kể từ iOS 5, bây giờ bạn có thể truy cập trực tiếp vào chế độ xem web UIScrollView - xem câu trả lời của Reconquistador để biết thêm thông tin.

+0

này là sự thật trước khi lên iOS 5. Xem câu trả lời Reconquistador của dưới đây cho một giải pháp up-to-date (http://stackoverflow.com/a/11796354/1148702) mà sử dụng truy cập công khai 'scrollview 'thuộc tính' UIWebView'. –

+0

Rất đúng! Đăng iOS 5, bây giờ bạn có thể thay đổi điều này. – lxt

2

Tôi không tin rằng bạn sẽ tìm thấy bất kỳ phương thức được hỗ trợ chính thức nào để thực hiện những gì bạn muốn.

7

Đây là một cách thực sự xấu xí, khủng khiếp để thực hiện việc này. Tôi trả lời điều này để cho bạn thấy những gì không bao giờ làm.

for (UIView *subview in webView.subviews) 
{ 
    if ([subview isKindOfClass:[UIScrollView class]]) 
     [(UIScrollView*)subview setContentOffset:CGPointZero animated:YES]; 
} 
+0

UISearchBar của anh ấy không phải là một phần phụ của UIWebView ... –

+0

OP đang hỏi cách cuộn một UIWebView xuống 0,0. Cách kích hoạt của nó là không liên quan. –

+0

Điều này thực sự hiệu quả. Tôi nghĩ rằng tôi sẽ gắn bó với các phương pháp JavaScript :-) Có thực sự là một lý do không làm khác hơn là trông giống như một hack? – Gazzer

6

Cuộn các UIWebView bằng cách gọi JavaScript qua Objective-C:

NSString *script = @"scrollTo(0, 0)"; 
[webView stringByEvaluatingJavaScriptFromString:script]; 

Đối với di chuyển mượt mà, sử dụng một thư viện như jQuery:

NSString *script = @"$('html, body').animate({scrollTop:0}, 'slow')"; 
[webView stringByEvaluatingJavaScriptFromString:script]; 
+0

siêu! hoạt động như một sự quyến rũ! –

0

này làm việc cho tôi:

CGPoint topOffset = CGPointMake(0, 0); 
//[scrollView setContentOffset: topOffset animated: YES]; 
[[[webView subviews] lastObject] setContentOffset:topOffset animated:YES]; 

Trường hợp webVie w là lớp con của UIWebView, tất nhiên.

-3

Hiển thị PDF trong UIWebView, tôi thấy bạn có thể chuyển lên đầu đơn giản bằng cách tải lại tài liệu.

+0

Đó là một cách rất tốn kém để làm điều này? – James

23
CGPoint top = CGPointMake(0, 0); // can also use CGPointZero here 
[myWebView.scrollView setContentOffset:top animated:YES]; 

(Lưu ý rằng nếu bạn đã thiết lập myWebView.scrollView.contentInset.top bạn sẽ muốn đi mà vào tài khoản thay vì chỉ di chuyển đến CGPointZero.)

+0

chỉ từ iOS5.0? –

+0

Tôi đã thử nghiệm nó ở mức 5.1 và 6.0 và hoạt động ở cả hai thiết bị này – Reconquistador

+1

+1 Khả dụng từ iOS5 trở lên. – InsertWittyName

0

tại sao không chỉ cần chạm vào thanh trạng thái của điện thoại. cho tất cả các điều khiển dựa trên scrollView, tableView, webView, scrollView, có một: Cử chỉ di chuyển trên đầu là một lần nhấn trên thanh trạng thái; khi thuộc tính này là CÓ, chế độ xem cuộn sẽ nhảy lên đầu nội dung khi cử chỉ này xảy ra. Giá trị mặc định của thuộc tính này là YES.

4

Truy cập 's scrollview và thiết lập YES phương pháp UIWebViewscrollsToTop;

WebView.scrollView.scrollsToTop = YES; 

Hy vọng điều này sẽ hữu ích!

0

Swift 3.x

webView.scrollView.setContentOffset(CGPoint.zero, animated: true) 
Các vấn đề liên quan