7

WebチャットクライアントをロードするWebビューがあります。

すべてのチャットと同様に、ページにはテキストを入力するためのテキストフィールドがあります。

問題は、ユーザーがキーボードを開くと、ページをリロードしているいくつかのajaxリクエストのために、しばらくすると自動的に非表示になることです。これは、キーボードが非表示になる前にユーザーが完全な文を入力できないため、ユーザーにとって非常に煩わしいものになります。

理由はわかりませんが、これはiPhone4SとiPhone5でのみ発生します。iPhone4、3GS、およびシミュレータでは、すべて問題なく動作します。

shouldStartLoadWithRequestを使用してリクエストをキャッチし、ユーザーがキーボードを非表示にした後でロードしようとしましたが、これによりチャットセッションが台無しになります。

同じメソッドでスレッドスリープを使用してリクエストを「ハング」させようとしましたが、メインスレッドで発生するため、アプリケーション全体がフリーズします。

キーボードが隠れないようにする方法はありますか?

4

3 に答える 3

7

長い研究の末、私はそれを行う方法を見つけました。それは最善ではありませんが、私を大いに助けてくれました。

最初DOMに webView firstResonder かどうかを確認するために使用します

- (BOOL)isWebViewFirstResponder
{
    NSString *str = [self.webView stringByEvaluatingJavaScriptFromString:@"document.activeElement.tagName"];
    if([[str lowercaseString]isEqualToString:@"input"]) {
        return YES;
    }
    return NO;
}

その後、UIWebViewDelegateメソッドに応答し、がファーストレスポンダーの場合shouldStartLoadWithRequestに戻りますNOUIWebView

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if([self isWebViewFirstResponder] &&
   navigationType != UIWebViewNavigationTypeFormSubmitted) {
        return NO;
    } else {
        return YES;
    }
}
于 2014-03-27T15:47:21.267 に答える
-1

DidLoad メソッド内で通知センターを使用して、キーボードが次のように非表示になるタイミングをリッスンできます。

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

- (void) keyboardWillHide{

  [webView becomeFirstResponder];
}

これにより、Web ビューのファーストレスポンダが作成され、キーボードが再び表示されます。私はそれを自分で試していないので、うまくいけばうまくいくでしょう..

于 2014-01-10T13:03:36.870 に答える
-1

テキストフィールドがUIViewにある場合

Webビューのデリゲートメソッドを使用できます

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    [textField becomeFirstResponder];
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    [textField becomeFirstResponder];
}

それ以外の場合は、textField が UIWebView にある場合は、以下に示すように textField を webView に置き換えます。

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    [webView becomeFirstResponder];
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    [webView becomeFirstResponder];
}
于 2014-01-10T13:11:18.480 に答える