UISwipeGestureRecognizer для UITextView - PullRequest
0 голосов
/ 27 мая 2011

У меня есть UITableView, в котором у каждого есть свой UITableViewCell.Внутри каждой этой ячейки есть UITextView.Я хотел бы связать каждый из этих UITextView с событием, используя UISwipeGestureRecognizer, когда UITextView коснулся один раз.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 27 мая 2011

Прикрепите распознаватели касаний и смахиваний к текстовому представлению программно.Установите состояние распознавателя пролистывания на отключенное при запуске.При нажатии включите распознавание пролистывания.Если касания позволяют включить / отключить пролистывание, это также должно быть легко сделать.

0 голосов
/ 27 мая 2011

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

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    // call whatever methods you want from here, including the method linked in your gesture recognizer;
    return NO; // this makes sure you don't edit anything, if that is the case you want
}

Вы должны иметь возможность делать все, что захотите, поскольку эта строка вызывается каждый раз, когда вы нажимаете на редактируемый текстовый вид. Если вам нужен доступ к информации о ячейке, в которой она находится, вы можете найти ее, позвонив в суперпредставления. Например, если вы внедрили свой textView в contentView ячейки, textView.superview.superview вернет ячейку, в которой она находится. Первый вызов superview возвращает contentView, а второй - ячейку. Вызов другого суперпредставления даст вам tableView. Я надеюсь, что это помогает.

РЕДАКТИРОВАТЬ: получить путь индекса довольно просто, если вы можете найти ячейку, в которую встроен textView. Предполагая, что textView является подпредставлением содержимого viewView ячейки, вы получите путь индекса.

UITableViewCell *cell = textView.superview.superview;
// you will get warnings on that.  because you're calling superview, it expects it to be
// a UIView instance, but if you call NSLog(@"%@", textView.superview.superview), it will
// return UITableViewCell, so you can ignore the warning.  anyway, assuming you have a 
// reference to your tableView, you find the index path with the next line
NSIndexPath *indexPath = [myTableView indexPathForCell:cell];
// then call the didSelect method
[self tableView:myTableView didSelectRowAtIndexPath:indexPath];

Если вы встраиваете свой textView в нечто отличное от contentView, это не сработает, вам просто нужно будет добавлять или вычитать вызовы superview в операторе NSLog, пока не найдете ячейку. Но это должно сделать это для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...