1

にいるときにバックグラウンドタップでキーボードを非表示にする最適化された方法を探していUITextFieldsましたUITableViewCell。私はいくつかのコードを作成しました。

4

2 に答える 2

1

hittestドットを実行するのが正しい方法のようです

以下のように、tableView が存在するビューにタッチ イベントを実装できます。

また、 textField オブジェクトを のメンバー変数に割り当てtextFieldDidBeginEditingます。これにより、キーボードが表示される特定のテキスト フィールドを再署名することができます。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textFieldObject resignFirstResponder];
}
于 2012-07-06T10:12:30.740 に答える
1

が含まれてtableviewいる間、バックグラウンドタップでキーボードを非表示にするためのカテゴリを作成しました。tableviewtextfield

私のヘッダーファイル:

#import <UIKit/UIKit.h>
#import "Utility.h"

@interface UITableView (HitTest)

@end

私の実装ファイル:

#import "UITableView+HitTest.h"

@implementation UITableView (HitTest)

UITableViewCell *activeCell;

-(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
    NSInteger iterations = 0;
    // check to see if the hit is in this table view
    if ([self pointInside:point withEvent:event])
    {
        UITableViewCell* newCell = nil;

        // hit is in this table view, find out 
        // which cell it is in (if any)
        for (UITableViewCell* aCell in self.visibleCells)
        {
            iterations ++;
            if ([aCell pointInside:[self convertPoint:point toView:aCell] withEvent:event])
            {
                newCell = aCell;
                break;
            }
        }
        if (!newCell)
        { 
            for (UIView *view in activeCell.subviews)
            {
                iterations++;
                if ([view isFirstResponder])
                {
                    [view resignFirstResponder];
                    break;
                }
            }
        }
        else
        {
            activeCell = newCell;
        }
        NSLog(@"total Iterations:%d",iterations);
    }

    // return the super's hitTest result
    return [super hitTest:point withEvent:event];   
}    

@end

これは私にとってはうまくいきます。

于 2012-06-29T10:45:40.103 に答える