2013-09-25 90 views
6

Tôi có UITextFields trong tableviewcells. Khi bạn vuốt qua ô không phải là một phần của trường văn bản, hành động xóa sẽ xuất hiện như mong đợi. Nếu bạn vuốt qua trường văn bản, nó sẽ ngừng xóa khỏi popping up.Vuốt cử chỉ trái qua UITextField

Làm cách nào để khắc phục sự cố này để bạn có thể vuốt qua các yếu tố đầu vào và ô sẽ kích hoạt hành động xóa?

+0

bạn đã giải quyết được vấn đề này chưa? –

+0

Không. Tôi đã thiết kế lại giao diện xung quanh vấn đề. –

+0

Cố gắng thêm - (void) tableView: (UITableView *) tableView commitEditingStyle: (UITableViewCellEditingStyle) editStyle forRowAtIndexPath: (NSIndexPath *) indexPath. Nó hoạt động nói dối quyến rũ – Lightygalaxy

Trả lời

2

Tôi nghĩ vấn đề ở đây là các liên lạc trên các lĩnh vực văn bản được can thiệp với nhận dạng cử chỉ swipe của bạn (có lẽ gắn liền với cái nhìn mẹ). Tôi đã có một vấn đề tương tự với một trường văn bản đã được đặt trong một UIScrollView.

Tôi gặp vấn đề này bằng cách phủ một UIView rõ ràng lên trên UITextField của tôi. Sau đó, tôi đã gán UITapGestureRecognizer cho chế độ xem rõ ràng này để đặt trường văn bản làm phần trả lời đầu tiên khi người dùng chạm vào trường. Nếu không, thao tác vuốt được gửi đến chế độ xem chính (chế độ xem cuộn) sẽ nhận ra thao tác vuốt mà không gặp bất kỳ sự cố nào. Đó là loại lame nhưng nó hoạt động.

Kịch bản này hơi khác so với của bạn, nhưng tôi cho rằng đó là vấn đề tương tự. Đây là những gì mã của tôi trông như thế nào, hy vọng nó giúp:

// 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 

Và sau đó trong bộ điều khiển:

- (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; 
} 
1

Âm thanh như bạn cần phải thiết lập các tài sản cancelsTouchesInView

yourGestureRecognizer.cancelsTouchesInView = NO; 
+0

Nó không làm việc cho tôi. –