2012-08-23 38 views
12

Tài liệu iOS cho biết rằng lớp UIWebView phù hợp với UIScrollViewDelegate. Nhưng một cá thể UIWebView không gọi phương thức scrollViewDidScroll của bộ điều khiển của nó. Đại biểu được đặt ngay bên phảiTại sao một cá thể UIWebView không gọi scrollViewDidScroll?

[webView setDelegate:self]; 

webViewDidFinishLoad được gọi thành công. Bộ điều khiển thực hiện cả hai đại biểu, UIWebViewDelegate và UIScrollViewDelegate, như thế này:

@interface WebviewController : UIViewController<UIWebViewDelegate, UIScrollViewDelegate>{ 
    UIWebView *webView; 
} 

Duyệt SO dẫn đến category solution rằng:

@implementation UIWebView(CustomScroll) 
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{ 
    [self.delegate scrollViewDidScroll: scrollView]; 
} 
@end 

Đó loại phương pháp thực hiện về cơ bản giống nhau: Việc gọi method scrollViewDidScroll của đại biểu. Vậy tại sao cách tiếp cận đầu tiên không hoạt động?

+2

làm bạn đặt đại biểu cho scrollView? 'webView.scrollView.delegate = self'? – pawelropa

+0

Không, tôi đã không làm vậy. Và vâng, nó hoạt động! – alex

+0

Vì vậy, một cá thể 'UIWebView' đặt ủy nhiệm' scrollViews' của nó cho cá thể đó theo mặc định? Có vẻ như ... Nếu không, cách tiếp cận danh mục sẽ không hoạt động. – alex

Trả lời

28

Đoán của tôi là bạn chỉ thiết lập người được ủy quyền cho UIWebView. Thử đặt đại biểu của scrollView.

webView.scrollView.delegate = self 

nó phải ổn.

+0

Không hoạt động với tôi –

+1

Hãy cân nhắc sử dụng KVO trên thuộc tính 'contentOffset' của con' scrollView' thay thế. Không cần phải sửa đổi thuộc tính ủy nhiệm của 'UIScrollView' vì' UIWebView' có thể sử dụng nó trong nội bộ. – lipka

0

Điều này không đúng. Nếu bạn sẽ sử dụng:

@implementation UIWebView(CustomScroll) 
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{ 
    [self.delegate scrollViewDidScroll: scrollView]; 
} 
@end 

Bạn sẽ mất tập trung khi cố gắng để nhập dữ liệu vào trang trên iOS7 và nhiều hơn nữa

Bạn cần phải thực hiện lớp tùy chỉnh cho UIWevView và ghi đè lên scrollViewDidScroll:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{ 
[super scrollViewDidScroll:scrollView]; 
[((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];} 
Các vấn đề liên quan