tableviewcells に UITextFields があります。テキストフィールドの一部ではないセルをスワイプすると、期待どおりに削除アクションが表示されます。テキストフィールドをスワイプすると、削除のポップアップが停止します。
入力をスワイプしてセルが削除アクションをトリガーできるようにするにはどうすればよいですか?
tableviewcells に UITextFields があります。テキストフィールドの一部ではないセルをスワイプすると、期待どおりに削除アクションが表示されます。テキストフィールドをスワイプすると、削除のポップアップが停止します。
入力をスワイプしてセルが削除アクションをトリガーできるようにするにはどうすればよいですか?
ここでの問題は、テキスト フィールドへのタッチがスワイプ ジェスチャ レコグナイザー (おそらく親ビューに接続されている) に干渉していることだと思います。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;
}
cancelsTouchesInView
プロパティを設定する必要があるようです
yourGestureRecognizer.cancelsTouchesInView = NO;