2016-01-27 3 views
0

Я просмотрел похожие вопросы и попробовал ответы, и я не могу заставить их работать, поэтому извиняюсь, если это дублированный вопрос.Добавить TapGestureRecogniser в UITextView

У меня есть два поля адреса в моем представлении таблицы, которые динамически добавляются в статические ячейки. Когда пользователь вводит адрес в первом поле, я хочу, чтобы вопрос «Копировать адрес» появлялся, когда они нажимают на второе поле адреса, а затем копируют адрес, если они отвечают «да». У меня это работает на tableView didSelectRowAtIndexPath, однако оно не работает, когда пользователь напрямую удаляет UITextView в поле. Я попытался добавить следующее к функции viewDidLoad():

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[self.billingAddress addGestureRecognizer:tap]; 

Но следующий код не срабатывает, когда UITextView billingAddress сливают.

- (void)handleTap:(UITapGestureRecognizer *)recognizer 
{ 
    NSLog(@"I am here"); 
} 

Я хотел бы отметить, что billingAddress определяется как свойство UITextField и назначил детали ячейки в Tableview cellForRowAtIndexPath из статической ячейки. Это делается с помощью следующего кода:

if (section == 0 && row == 3) { 
    BFCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"CheckoutInputCell"]; 
    cell.nameLabel.text = @"Billing Address"; 
    cell.nameLabel.font = [UIFont fontWithName:@"Populaire" size:23.0f]; 
    cell.textField.placeholder = @"Required"; 
    self.billingAddress = cell.textField; 
    cell.textField.keyboardType = UIKeyboardTypeAlphabet; 
    return cell; 
} 

Я интересно, если я задаю водопроводную жест в неправильном месте, и он должен быть назначен cell.textField. Любая помощь по этому вопросу будет принята с благодарностью.

ответ

1

Я думаю, что происходит конфликт между текстовым полем и распознающим жестом. Я бы использовал UITextFieldDelegatetextFieldShouldBeginEditing:, чтобы определить, когда пользователь вступает в текстовое поле.

+0

Спасибо за это Чарльз, это сработало очень хорошо. – dickiebow

0

Это большая ошибка, если ссылка на объект принадлежит UITableViewCell.

Лучше добавить UITapGestureRecognizer в текстовое поле внутри ячейки напрямую, если с помощью булевых флагов в ячейке рассказать об этом, если это тот, на который нужно ответить.

if (section == 0 && row == 3) { 
    BFCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"CheckoutInputCell"]; 
    cell.nameLabel.text = @"Billing Address"; 
    cell.nameLabel.font = [UIFont fontWithName:@"Populaire" size:23.0f]; 
    cell.textField.placeholder = @"Required"; 
    //self.billingAddress = cell.textField; // wrong way. 
    cell.addTouchFlag = true // do this instead. 
    cell.textField.keyboardType = UIKeyboardTypeAlphabet; 
    return cell; 
} 

и оба

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[self.textField addGestureRecognizer:tap]; 

И

- (void)handleTap:(UITapGestureRecognizer *)recognizer 
{ 
    NSLog(@"I am here"); 
} 

Должно быть в классе клеток (Если вы не один вы sould создать).

Обновление: в Charles Thierry answer у него есть хорошая точка, что использование метода делегата является лучшим способом обнаружить, как пользователь нажимает insid textField. но вы должны сделать это так же, как я упоминал выше. Что означает, что класс ячейки будет соответствовать UITextFieldDelegate и реализовать textFieldShouldBeginEditing: