2011-07-28 7 views
3

は、私は、次のコードを持っています。 clearButtonをクリックすると、すべて正常に動作し、UITextFieldがクリアされた後でもキーボードが表示されます。しかし、提案された自動修正を受け入れたくない場合は、キーボードが消えてテキストが置き換えられます。UITapGestureRecognizerと自動補正

私はUITableViewUITextFieldを持っているので、私は、ユーザーがUITextField外でクリックしたときので、私はキーボードを辞任したいと思います。、UITapGestureRecognizerを必要とします

どうすれば自動補正を拒否することができますか?ユーザが望んでいてもキーボードはまだアクティブですか?これはなぜclearButtonで正しく動作するのですが、自動修正を拒否するのはなぜですか?

EDIT:UITextFieldの内部にあるので、clearButtonで正しく機能します。したがって、ジェスチャーは起動されません。しかし、提案されたテキスト訂正をクリックすると、それは発射されます...ユーザーが提案されたテキスト訂正をクリックしたかどうかをチェックする方法はありますか?ここで

答えて

1

私は青いautocorrectedテキストをタップするとき、問題を解決するために実装されてきたジェスチャーデリゲートメソッドです:自動補正のタップで

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    BOOL handleTouch = NO; 
    UIView *v = [self.view hitTest:p withEvent:nil]; 
    Class autocorrectionCancelClass = NSClassFromString(@"UIAutocorrectInlinePrompt"); 
    if(![v isKindOfClass:UIControl.class] && ![v isKindOfClass:autocorrectionCancelClass] && ![v isDescendantOfView:currentlyEditedTextView]) 
    { 
     handleTouch = YES; 
    } 

    return handleTouch; 
} 

はキャンセルボタン、vがプライベートSDKクラスUIAutocorrectInlinePromptの図です。しかし、それは編集されたUITextField/UITtextViewのサブビューでもあります。

編集:UITextFieldの場合、UIAutocorrectInlinePromptビューはフィールドの子孫ではありません(iOS 4.3 & 5.0でテスト済み)。問題は、このクラスはプライベートなものとして名前を変更できることです。

0

ケンヂのソリューションは、UIControlを除いてうまく機能します。 彼のソリューションのクリーンでシンプルなバージョンです:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    return ![touch.view isKindOfClass:NSClassFromString(@"UIAutocorrectInlinePrompt")]; 
} 
関連する問題