4

UIWebView「通常の」スクロール操作でコンテンツを編集できるようにしようとしています。これにより、テキストカーソルがキーボードによって非表示になるときに、UIWebViewスクロールによってそれが防止されます。iOS開発者ライブラリから「キーボードの管理」ドキュメントを読みましたが、のscrollViewプロパティを使用しても結果が得られませんでしたUIWebViewNSTextViewまた、ScrollViewのプロパティ/メソッドまたはjavascriptコマンドを使用して、Webで多くのトリックを見つけましたが、たとえばMacOSの場合のように、通常のスクロール操作を取得できません。この問題の解決策を知っていますか?

[編集済み]ソリューションを取得し、によって起動されるメソッドを作成しましたNSTimer。カレットのY位置を取得するには、アクティブな要素の選択を取得し、ダミーノードを挿入する必要があります。次に、node.offsetTopプロパティを取得すると、caretYが得られます。ノードを削除することを忘れないでください...

4

1 に答える 1

0

わかりました、これがAppleの例での方法です(プロジェクト名が何であったかはもう覚えていません):

1. キーボード通知を登録します (キーボードは、表示されるか非表示になるたびに通知を送信します)。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillBeHidden:)
                                             name:UIKeyboardWillHideNotification object:nil];

2.キーボードのサイズを取得し(高さに関心があります)、そのポイントがビューに含まれていない場合はスクロールします。

- (void)keyboardWasShown:(NSNotification*)aNotification
{

NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    // If active text field is hidden by keyboard, scroll it so it's visible
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;

CGPoint point;

point = CGPointMake(0, activeTextField.frame.origin.y + activeTextField.frame.size.height);

if (!CGRectContainsPoint(aRect, point ))
{
    CGPoint scrollPoint = CGPointMake(0.0, activeTextField.frame.origin.y+activeTextField.frame.size.height-kbSize.height);
    [scrollView setContentOffset:scrollPoint animated:YES];
}

キーボードを非表示にするときは逆のことを忘れずに、別のView Controllerにプッシュする場合はオブザーバーを削除してください。この例は UIScrollView のテキスト フィールドで使用されていますが、簡単に変更できると確信しています。

個人的には、Web 側も管理する場合は、幅 320 ピクセルの Web ページを作成し、webView の sizeToFit を設定し、それを UIScrollView の上に追加して、そこからスクロールを管理することを好みます。textFields の場合、javascript を使用して選択した textField のコンテナーを取得し、その座標を取得します。

于 2012-09-04T14:54:03.873 に答える