2013-06-17 5 views
1

У меня UITextFields в UITableViewCells. Текстовые представления, похоже, блокируют прокрутку. Когда я помещаю кончик пальца в рамки текстового вида и пытаюсь прокрутить всю таблицу, он не будет прокручиваться. Прокрутка отлично за пределами текстовых представлений.UITextField блокирует прокрутку в UITableViewCell

Как я могу остановить это поведение?

ответ

1

Кажется, что единственный способ избежать этого является наследованием UIScrollView и осуществлять

(BOOL)touchesShouldCancelInContentView:(UIView *)view 

Затем определить, что вид является UITextField и вернуть YES, иначе вернуть NO.

+0

извините, текстовое поле не текстовое изображение. я обновлю свой вопрос – cannyboy

+0

Я только что обновил свой ответ –

+0

Эй, @AntonioMG, я думаю, что это, как правило, правильный путь, однако, когда вы имеете дело с табличным представлением, объект UIView, переданный в touchsShouldCancelInContentView: всегда представляется экземпляром UITableViewCellContentView, а не subviews, так что не думайте, что вы сможете проверить, какое представление было прослушировано. – marchinram

1

Этот код ниже немного взломанный, но он работает для меня, в основном просто установите userInteractionEnabled в UITextView в NO, а затем установите YES, когда вы обнаружите, что пользователь нажал на него. Ниже приведен код для моей пользовательской ячейки с текстовым просмотром, она прокручивается для меня, когда пользователь запускает прокрутку из UITextView. Это приводит к тому, что свиток представляет собой жест панорамы, а не кран.

#import "MyCell.h" 

@interface MyCell() <UITextFieldDelegate> 

@property (weak, nonatomic) IBOutlet UITextField *textField; 

@end 

@implementation MyCell 

- (void)awakeFromNib 
{ 
    self.textField.userInteractionEnabled = NO; 
    self.textField.delegate = self; 

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap:)]; 
    [self addGestureRecognizer:tapRecognizer]; 
} 

#pragma mark - Private methods 

- (void)didTap:(UITapGestureRecognizer *)tapRecognizer 
{ 
    CGPoint location = [tapRecognizer locationInView:self]; 

    CGRect pointRect = CGRectMake(location.x, location.y, 1.0f, 1.0f); 
    if (!CGRectIsNull(CGRectIntersection(pointRect, self.textField.frame))) { 
     self.textField.userInteractionEnabled = YES; 
     [self.textField becomeFirstResponder]; 
    } 
} 

#pragma mark - UITextFieldDelegate methods 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    self.textField.userInteractionEnabled = NO; 
} 

@end 
Смежные вопросы