2013-09-25 14 views
6

Ho UITextFields in tableviewcells. Quando si scorre la cella non fa parte del campo di testo, l'azione di eliminazione viene visualizzata come previsto. Se si scorre il campo di testo, si interrompe l'eliminazione dalla comparsa.Scorri verso sinistra i gesti su UITextField

Come posso risolvere questo in modo da poter scorrere gli input e la cella attiverà l'azione di eliminazione?

+0

hai risolto questo problema? –

+0

No. Ho ridisegnato l'interfaccia attorno al problema. –

+0

Prova ad aggiungere - (void) tableView: (UITableView *) tableView commitEditingStyle: (UITableViewCellEditingStyle) editStyle forRowAtIndexPath: (NSIndexPath *) indexPath. Funziona il fascino della menzogna – Lightygalaxy

risposta

2

Credo che il problema qui è che il tocco sul campo di testo sta interferendo con il riconoscitore colpo gesto (presumibilmente attaccato alla vista primaria). Ho avuto un problema simile con un campo di testo che è stato inserito in un UIScrollView.

Ho risolto questo problema sovrapponendo un UIView chiaro in cima al mio UITextField. Ho quindi assegnato un UITapGestureRecognizer a questa vista chiara per impostare il campo di testo come primo risponditore quando l'utente tocca il campo. In caso contrario, lo swipe viene inviato alla vista genitore (una vista di scorrimento) che riconosce lo scorrimento senza problemi. È una specie di zoppo, ma funziona.

Questo scenario è leggermente diverso dal tuo, ma penso che sia lo stesso problema. Ecco ciò che il mio codice è simile, si spera che aiuta:

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

E poi nel controller:

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

Suona come è necessario impostare la proprietà cancelsTouchesInView

yourGestureRecognizer.cancelsTouchesInView = NO; 
+0

Non funziona per me. –

Problemi correlati