cancelsTouchesInView
Myślę, że problemem jest to, że dotknięcie pola tekstowego koliduje z rozpoznawania gestów machnięcia (przypuszczalnie dołączony do widoku macierzystego). Miałem podobny problem z polem tekstowym umieszczonym w UIScrollView.
Usunąłem ten problem przez nałożenie wyraźnego UIView na mój UITextField. Następnie przypisałem UITapGestureRecognizer do tego przejrzystego widoku, aby ustawić pole tekstowe jako pierwszą odpowiedź, gdy użytkownik dotknie pola. W przeciwnym razie przesuwane jest wysyłane do widoku nadrzędnego (widok przewijania), który rozpoznaje przesunięcie bez żadnych problemów. To trochę kiepskie, ale działa.
Ten scenariusz jest nieco inny od twojego, ale myślę, że to ten sam problem. Oto co mój kod wygląda, mam nadzieję, że to pomaga:
// 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
A potem w kontrolerze:
- (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;
}
Czy rozwiązałeś ten problem? –
Nie. Przeprojektowałem interfejs wokół problemu. –
Spróbuj dodać - (void) tableView: (UITableView *) tableView commitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath: (NSIndexPath *) indexPath. Działa kłamliwie. – Lightygalaxy