2010-04-23 28 views
6

Ứng dụng của tôi có số UITableView. UITableView đó có chế độ xem tiêu đề, là UIWebView.UITableView's, UIWebViews và scrollsToTop Property = Trouble

Theo mặc định, chế độ xem cuộn có thuộc tính scrollsToTop được đặt thành YES, cho phép người dùng nhấn vào thanh trạng thái để cuộn lên đầu chế độ xem cuộn.

Khi có hai chế độ xem cuộn được nhúng trong một chế độ xem, cả hai đều có thuộc tính scrollsToTop được đặt thành YES, hãy nhấn vào thanh trạng thái sẽ không làm gì.

Giải pháp là đặt một trong các thuộc tính scrollsToTop thành NO. Điều đó cho phép nhấn lại thanh trạng thái.

Bây giờ, đây là vấn đề: UIWebView không hiển thị chế độ xem cuộn của nó và do đó, không có quyền truy cập vào thuộc tính scrollsToTop của nó. Tôi chỉ muốn xem bảng để cuộn lên trên cùng khi thanh trạng thái được khai thác, chứ không phải dạng xem web.

Có ai biết cách tôi có thể đạt được điều này không?

Trả lời

3

Có bây giờ là một tài sản scrollview, được ưa thích:

myWebView.scrollView.scrollsToTop = YES; 
0

Bạn đã thử phương thức ủy nhiệm từ UIScrollViewDelegate scrollViewShouldScrollToTop chưa?

+0

Dường như nó không hoạt động. Ban đầu tôi đã thử triển khai thực hiện phương thức đó bên cạnh các phương thức UIWebViewDelegate, nhưng tôi không nghĩ rằng nó sẽ hoạt động vì chính chế độ xem web là đại biểu xem dạng cuộn, thay vì giao diện của web view. Vì vậy, sau đó tôi phân lớp UIWebView và thực hiện, nhưng vẫn không có may mắn. Nó dường như không hoạt động. – Jasarien

+0

Điều tra thêm: Có vẻ như chính UIWebView không phản hồi với các phương thức ủy nhiệm xem cuộn. Có lẽ một số đối tượng nội bộ khác là đại biểu xem cuộn? – Jasarien

3

Câu hỏi này có chứa câu trả lời:

iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back

tôi không thể tìm thấy nó trước đây kể từ khi nó được yêu cầu khác nhau và về một chủ đề hơi khác nhau, nhưng kết quả là như nhau.

Vì vậy, kết quả là đi qua các bản xem trước cho đến khi bạn tìm thấy chế độ xem cuộn. Tôi đã làm điều này trước khi trong các ứng dụng khác và không nghĩ về nó trong trường hợp này. Nó nên được App-Store-Safe, vì tôi có các ứng dụng trên cửa hàng sử dụng ý tưởng này.

Một loại trên UIWebView để kích hoạt hoặc vô hiệu hóa di chuyển về đầu trang:

@implementation UIWebView (UIWebViewScrollToTopAdditions) 

- (void)setScrollsToTop:(BOOL)scrollsToTop 
{ 
    if ([[self subviews] count] > 0) 
    { 
     UIScrollView *scrollView = (UIScrollView *)[[self subviews] objectAtIndex:0]; 
     if ([scrollView respondsToSelector:@selector(setScrollsToTop:)]) 
     { 
      [scrollView setScrollsToTop:scrollsToTop]; 
     } 
    } 
} 

@end 
2

này thường xảy ra vì tất cả scrollviews có một giá trị mặc định . Khi các bản xem trước hoặc lần xem trang web mới được tạo, chúng sẽ có scrollsToTop được đặt thành CÓ. Tôi đã viết một loại đơn giản cho vấn đề cụ thể này:

-[UIScrollView makeOnlyThisScrollViewScrollToTopOnStatusBarTap]; 

https://gist.github.com/hfossli/6776203

Nó về cơ bản đặt scrollsToTop để NO trên tất cả các scrollViews khác so với cái bạn đang xác định + chăm sóc giá trị mặc định. Chúc may mắn!

+1

Đây là điều duy nhất làm việc cho tôi. Nên có nhiều phiếu bầu hơn trong quan điểm của tôi. Cám ơn vì cái này. –

+1

Điều này hoạt động hoàn hảo! – Legnus