UIWebViewを搭載したiPhoneで実行されているアプリケーションがあります。このビューにWebページをロードすると、ユーザーはページの下部にあるUIToolBarに追加したボタンを押して次のページに進むことができます。私が求めているのは、ページの半分または一番下までスクロールするまで、ユーザーがこれらのボタンを押さないようにすることです。これは可能ですか?
3 に答える
ページの半分以上になる場合は、おそらく webview のスクロール ビューのコンテンツ オフセットを使用できます。
コントローラーに、webview のスクロールビューを参照するインスタンス変数を作成します。iOS 5 では webview.scrollView プロパティを使用して scrollView にアクセスできますが、以前のバージョンでは webView のサブビューを検索する必要がありました。
if([_webView respondsToSelector:@selector(scrollView)]) {
_webViewScrollView = _webView.scrollView;
}
else {
for (UIView *subview in _webView.subviews) {
if ([subview isKindOfClass: [UIScrollView class]]) {
_webViewScrollView = subview;
break;
}
}
}
次に、スクロールビューのデリゲートを、関心のあるコントローラーに設定します
_webViewScrollView.delegate = self;
次のデリゲート メソッドを実装します。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if( scrollView.contentOffset.y > someValue ) {
// Enable Buttons
}
else {
// Make / Keep buttons inactive..
}
}
別の方法は、JavaScript を使用し、stringByEvaluatingJavaScriptFromString でファンキーなことを行うことです。
scrollView
UIWebView のプロパティを使用し、その委任コールバックを使用します
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
スクロール終了イベントと UIScrollview プロパティの contentOffset を処理するために、そのコンテンツ サイズ (Web ページの実際のサイズ) に対するスクロール位置を知ることができます。
アプリケーションの起動時に、ツールバー ボタンを無効にします。次に、この行を追加して現在のスクロール位置を確認します。
int position = [webView stringByEvaluatingJavaScriptFromString:@"window.scrollBy(0,180);"];
ページを特定の位置までスクロールしたら、ツールバー ボタンを有効にします。 または 、スクロール ビューのデリゲート メソッドを使用できます。