6

tableviewcells に UITextFields があります。テキストフィールドの一部ではないセルをスワイプすると、期待どおりに削除アクションが表示されます。テキストフィールドをスワイプすると、削除のポップアップが停止します。

入力をスワイプしてセルが削除アクションをトリガーできるようにするにはどうすればよいですか?

4

3 に答える 3

2

ここでの問題は、テキスト フィールドへのタッチがスワイプ ジェスチャ レコグナイザー (おそらく親ビューに接続されている) に干渉していることだと思います。UIScrollView に配置されたテキスト フィールドで同様の問題が発生しました。

UITextField の上に明確な UIView を重ねることで、この問題を回避しました。次に、この明確なビューに UITapGestureRecognizer を割り当てて、ユーザーがフィールドをタップしたときにテキスト フィールドをファーストレスポンダとして設定しました。それ以外の場合、スワイプは問題なくスワイプを認識する親ビュー (スクロール ビュー) に送信されます。それはちょっと不自由ですが、うまくいきます。

このシナリオはあなたのものとは少し異なりますが、同じ問題だと思います。私のコードは次のようになります。

// UIView subclass header
@interface LSAddPageView : UIView

@property (weak, nonatomic) IBOutlet UITextField *textField;  // Connected to the UITextField in question
@property (strong, nonatomic) UIView *textFieldMask;
@property (assign, nonatomic) BOOL textFieldMaskEnabled;

@end

// UIView subclass implementation
@implementation LSAddPageView

- (void)awakeFromNib
{
    [super awakeFromNib];

    _textFieldMask = [UIView new];
    _textFieldMask.backgroundColor = [UIColor clearColor];
    [self insertSubview:_textFieldMask aboveSubview:self.textField];
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    _textFieldMask.frame = self.textField.frame;
}

- (BOOL)textFieldMaskEnabled
{
    return _textFieldMask.hidden == NO;
}

- (void)setTextFieldMaskEnabled:(BOOL)textFieldMaskEnabled
{
    _textFieldMask.hidden = !textFieldMaskEnabled;
}

@end

そして、コントローラーで:

- (void)viewDidLoad
{
    [super viewDidLoad];

    _addPageView = (LSAddPageView*)self.view;

    _maskGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapMask:)];
    _maskGestureRecognizer.numberOfTapsRequired = 1;
    _maskGestureRecognizer.numberOfTouchesRequired = 1;
    [_addPageView.textFieldMask addGestureRecognizer:_maskGestureRecognizer];

    self.textField.delegate = self; // Set delegate to be notified when text field resigns first responder
}

- (void)didTapMask:(UIGestureRecognizer*)recognizer
{
    _addPageView.textFieldMaskEnabled = NO;
    [self.textField becomeFirstResponder];
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    _addPageView.textFieldMaskEnabled = YES;
    return YES;
}
于 2014-07-01T03:47:52.977 に答える
1

cancelsTouchesInViewプロパティを設定する必要があるようです

yourGestureRecognizer.cancelsTouchesInView = NO;
于 2013-09-25T22:36:36.317 に答える