2010-07-11 23 views
8

Tôi biết rằng điều này là có thể trong Tweetie cho iPhone hoặc ứng dụng iPhone xkcd, nhưng họ đang sử dụng một bảng. Bất kỳ ý tưởng nếu điều này có thể được thực hiện cho một đơn giản UIWebView là tốt? Tôi biết các đề xuất Javascript trong số this SO question, nhưng điều gì về việc tạo ra nguyên bản?Làm cách nào để làm mới UIWebView bằng cử chỉ "kéo xuống và thả"?

Trả lời

5

FYI, iOS 5 đã chính thức giới thiệu bất động sản scrollview trong UIWebView. Tôi đã thử nghiệm nó. Nó hoạt động hoàn hảo với mã kéo và làm mới của EGO. Vì vậy, vấn đề không còn là vấn đề đối với bất kỳ thiết bị iOS 5 nào.

Để giảm tính tương thích, bạn vẫn cần mã của @ CedricSoubrie.

13

Để lấy sự kiện cuộn trên UIWebView tôi personnaly sử dụng mã này để có được những scrollview đó là bên trong UIWebView:

- (void) addScrollViewListener 
{ 
    UIScrollView* currentScrollView; 
    for (UIView* subView in self.myWebView.subviews) { 
     if ([subView isKindOfClass:[UIScrollView class]]) { 
      currentScrollView = (UIScrollView*)subView; 
      currentScrollView.delegate = self; 
     } 
    } 
} 

Đó là làm việc. Bạn cũng có thể sử dụng nó để gọi [(UIScrollView*)subView setContentOffset:offSet animated:YES]; Vấn đề duy nhất có thể không vượt qua việc kiểm tra mã của Apple. Tôi chưa biết vì tôi vẫn đang trong giai đoạn mã hóa.

Đã có ai thử chưa?

+0

Tôi biết từ một nhà phát triển nhất định rằng cô ấy đã vượt qua quy trình phê duyệt trong khi có thứ gì đó như thế này trong mã, để xóa bóng 'UIWebView' (bạn cũng phải có' UIScrollView' cho điều đó) – Joost

+0

như quyến rũ! (Mặc dù tôi chưa gửi ứng dụng của mình cho App Store) –

+0

Hãy coi chừng, mã này không hoạt động trong iOS 5 vì scrollView của lớp webView đã thay đổi. Sử dụng mã này để thay thế: if ([subView isKindOfClass: [UIScrollView class]]) Tôi đã thay đổi bài đăng gốc của mình để mã tương thích với iOS 5 – CedricSoubrie

1

Để nhận tham chiếu cho UIScrollView trong UIWebView, chỉ cần tìm kiếm bằng cách lặp lại các bản xem trước máng.

for(id eachSubview in [webView subviews]){ 
     if ([eachSubview isKindOfClass:[UIScrollView class]]){ 
      scrollView = eachSubview; 
      break; 
     } 
} 

Sau đó bạn có thể dễ dàng kết nối mọi thứ với EGORefreshTableHeaderXem giao diện với UIWebView và UIScrollView callback delegate.

1

Để nói sự thật, lớp UIWebVIew có một phương thức getter không có giấy tờ được gọi là _scrollView; Vì vậy, mã đi:

scrollView = [webView _scrollView];

+0

Làm mọi thứ theo cách này là sử dụng "API riêng". Nếu bạn sử dụng phương pháp CedricSoubrie ở trên, bạn chỉ sử dụng các phương thức công khai. – jkp