2

iOSOpenDevを使用して通知センター用のweeappを作成しています。私はにを持っておりUITextField、プロトコルUIViewを実装しました。UITextFieldDelegate

私の問題はtextFieldShouldClear、UITextFieldのクリアボタンをクリックしてもメソッドが呼び出されないことです。shouldChangeCharactersInRangeやtextFieldShouldReturnなどの他のインターフェイスメソッドは問題なく呼び出されます。

インターフェイスメソッドが呼び出されない理由はありますか?

4

3 に答える 3

1

ユーザーが画面上の他の場所をタップしたときにキーボードを閉じていたときに、この問題が発生しました。タップを探すジェスチャレコグナイザーがあり、タップが検出されると、テキストフィールドでresignFirstResponderが呼び出されます。残念ながら、それはクリアボタンを壊します。

私がしたことは、タップをフィルタリングしてテーブルビューの外側にあることを確認することでした。ボタンのタップを手動でトリガーする必要があるため、少し複雑になりました。

// In: - (void)handleTap:(UITapGestureRecognizer *)sender {
// The user tapped outside a text field, drop the keyboard.
// Unfortunately this normally breaks the clear button, so we'll check that the
// tap is outside the table view (and therefore not on a clear button).
BOOL inButton = CGRectContainsPoint(self.signInButton.bounds, [sender locationInView:self.signInButton]);
BOOL inTable = CGRectContainsPoint(self.tableView.bounds, [sender locationInView:self.tableView]);
if (!inTable && !inButton ) {

    BOOL didEndEditing = [self.view endEditing:NO];

    // But... if we were editing a field (& therefore the keyboard is showing),
    // and if they tapped the sign in button, sign in. Not sure where the
    // onSignIn event is getting lost. The button does highlight. But the
    // call to endEditing seems to eat it.
    if (didEndEditing && inButton) {
        [self onSignIn:self.signInButton];
    }
}
于 2013-07-17T18:02:56.467 に答える
0

テキストフィールドのデリゲートが自分自身であることを確認してください。

theTextField.delegate = self;

UIActionSheetがUITextFieldDelegateプロトコルを吸い上げると聞きましたが、通知センターも同じことをする可能性があります...

于 2012-02-19T23:49:07.993 に答える
0

Graham Perksの回答に続いて、resignFirstResponderの呼び出しを次のように変更しました。

[self.focusInput performSelector: @selector(resignFirstResponder)
                      withObject: nil
                      afterDelay: 0.2f];

これで、キーボードは意図したとおりにタップで自動的に非表示になりますが、クリアボタン機能が復活しました。

于 2013-07-25T23:04:31.240 に答える