2011-12-13 12 views
4

私はUIPopoverControllerのUIWebViewとして入力フォームを表示しているiPadアプリケーションを持っています。私のポップオーバーコントローラは、キーボードが現れたときにサイズを変更する必要がないようなサイズになっています。入力フィールドの再配置のためのUIWebViewの防止

UIWebViewの入力フィールドをタップすると、キーボードが表示されたときにWebビューがさらに上に移動します。テキストフィールドがフレームの上部にある点まで押し上げられます。 (これはモバイルサファリでフォームを使用するときに表示される標準的な動作です)。

キーボードが起動する前にウェブビューがスクロールされませんが、一度表示されると(2番目の画像に表示されるように)、ウェブビューを正しい位置にスクロールダウンできます。

私のwebviewは既にサイズが正しく設定されているため、この動作は望ましくありません。誰にもこれを防ぐ方法についての提案はありますか? (ウェブビューを使用していない場合は現在オプションではありません)

ありがとうございました!

View without keyboard View with keyboard

+0

これでいくつかのjavascript/jqueryを行うことができるようですので、あなたのタグを編集してそこでいくつかの回答を得ることができます。 –

+0

私はこれらの行に沿ったアプローチが可能かどうか疑問に思ったが、タグ付けするのを忘れていた:)感謝! – jmac

答えて

3
  1. viewDidLoad

    [[NSNotificationCenter defaultCenter] addObserver:self 
        selector:@selector(keyboardWillShow:) 
        name:UIKeyboardWillShowNotification object:nil]; 
    
  2. keyboardWillShowを実装するにNSNotificationCenterUIKeyboardWillShowNotificationを追加しますとreadjustWebviewScroller方法

    - (void)keyboardWillShow:(NSNotification *)aNotification { 
        [self performSelector:@selector(readjustWebviewScroller) withObject:nil afterDelay:0]; 
    } 
    
    
    - (void)readjustWebviewScroller { 
        _webView.scrollView.bounds = _webView.bounds; 
    } 
    

これは私にとっては役に立ちます。

+2

私のためには機能しません。 – Remover

+0

私のために働く:-)素敵な仕事 –

+0

私のために働く。ありがとう! – poshaughnessy

0

私はObjective-Cプログラマではありません(実際Objective-Cはまったく分かりません:-)。でもこれもやってみる必要がありました(WebViewのiPad上で実行している私のWebアプリケーションで)しかし、それは動作します - 私はこれが最善の解決策ではないことを知っている

- (void)init { 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(keyboardWillShow:) 
    name:UIKeyboardWillShowNotification object:nil]; 
} 

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

    float x = self.webView.scrollView.bounds.origin.x; 
    float y = self.webView.scrollView.bounds.origin.y; 
    CGPoint originalOffset = CGPointMake(x, y); 

    for (double p = 0.0; p < 0.1; p += 0.001) { 
     [self setContentOffset:originalOffset withDelay:p]; 
    } 
} 

- (void)setContentOffset:(CGPoint)originalOffset withDelay:(double)delay { 
    double delayInSeconds = delay; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self.webView.scrollView setContentOffset:originalOffset animated:NO]; 
    }); 
} 

:は、Googleの「小さな」助けを借りて、私はこれをしませんでした。一般的なプログラミング(私はObjective-Cを知らない)の観点からは、UIScrollViewクラスのsetContentOffsetメソッドを上書きし、独自のビヘイビアを実装することができます(おそらく親のスーパーメソッドを呼び出す可能性があります)。

関連する問題