UITableViewCell里面的UITextField刷卡删除问题

自iOS 8以来,我遇到了在自定义UITableViewCell上滑动以删除手势的问题。

这个问题似乎来自UITableViewCell的contentView中的UITextField。

这似乎是在iOS 8中的问题,我有相同的代码在iOS 7中正常工作。

我怎样才能保持UITextField可编辑和滑动删除手势在同一时间工作?

以下为我工作:

self.tableView.panGestureRecognizer.delaysTouchesBegan = YES; 

我在iOS 8中发现了一个解决方法

子类UITextField并在UITextField的顶部添加一个视图,然后添加一个UIGestureRecognizer单击“掩码”视图。

 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) @interface OMTextField : UITextField @property (nonatomic,retain) NSNumber*canBecomeFirstResponderFlag; @end @implementation OMTextField -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { _canBecomeFirstResponderFlag = @0; UIView*mask = [[UIView alloc] init]; mask.translatesAutoresizingMaskIntoConstraints = NO; NSLayoutConstraint *maskT = [NSLayoutConstraint constraintWithItem:mask attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]; NSLayoutConstraint *maskB = [NSLayoutConstraint constraintWithItem:mask attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]; NSLayoutConstraint *maskL = [NSLayoutConstraint constraintWithItem:mask attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]; NSLayoutConstraint *maskR = [NSLayoutConstraint constraintWithItem:mask attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]; [self addSubview:mask]; [self addConstraints:@[maskT,maskB,maskL,maskR]]; UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; [mask addGestureRecognizer:singleFingerTap]; } } return self; } -(BOOL)canBecomeFirstResponder{ BOOL canBecomeFirstResponder; if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { canBecomeFirstResponder = [_canBecomeFirstResponderFlag boolValue]; _canBecomeFirstResponderFlag = @0; } else{ canBecomeFirstResponder = [self.delegate textFieldShouldBeginEditing:self]; } return canBecomeFirstResponder; } - (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { _canBecomeFirstResponderFlag = @1; BOOL souldBecomeFirstResponder = [self.delegate textFieldShouldBeginEditing:self]; if (souldBecomeFirstResponder) { [self becomeFirstResponder]; } } @end