0

内部にテキスト フィールドを持つカスタム UITableViewCell があります。IBを使用して作成し、カスタムクラスを持っています。

さて、私の問題は、テキスト入力中にユーザーがテキストフィールドの外側をクリックした場合(キーパッドのリターン/完了キーを押さずに)、フィールドがファーストレスポンダーを辞任するようにテキストフィールドをセットアップしたいということです。Touch Up Inside イベントを処理する必要があることを理解しました。ただし、接続を行っても、テーブルビュークラスはこのイベントを受け取りません。UITableViewCelである必要があるため、UIcontrolのサブクラスではないため、作成できません。

では解決策は??これらのイベントを受け取るにはどうすればよいですか??

ヘッダー ファイル:

#import <UIKit/UIKit.h>

@interface MMSingleTextFieldCell : UITableViewCell <UITextFieldDelegate>

// Properties
@property (weak, nonatomic) IBOutlet UITextField *singleTextField;
// Methods
- (IBAction)eventTouchUpOutside:(id)sender;
- (IBAction)eventTouchUpInside:(id)sender;
@end

クラスファイル:

#import "MMSingleTextFieldCell.h"

@implementation MMSingleTextFieldCell

@synthesize singleTextField;


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}


- (IBAction)eventTouchUpOutside:(id)sender {
    [singleTextField resignFirstResponder];
}

- (IBAction)eventTouchUpInside:(id)sender {
    [singleTextField resignFirstResponder];

}
4

3 に答える 3

0

これを試して:

1) UIGestureRecognizerDelegate プロトコルを実装する

2) たとえば、viewDidLoad では、次のように作成します。

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(hideKeyboard:)];

    tap.delegate = self;
    [self.view addGestureRecognizer:tap];

3) では、1 からプロトコルのメソッドを実装します。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    // Use this for allow some control to receive his natural tap event. You can use tap.cancelsTouchesInView = NO; in the 2 step instead of this, try both of then and choose on your own.
    if (touch.view == <some control>) {
        //NSLog(@"NO");
        return NO;
    }
    //NSLog(@"YES");

    return YES;
}

4) 最後に、タップのコールバックを実装します

-(void) hideKeyboard:(id)sender{

    if (<your edit text>.isEditing) {
        [<your edit text> resignFirstResponder];
    }
}

これが役立つこと、または少なくとも正しい方向に向けることを願っています

于 2013-05-07T21:54:22.423 に答える