UITextView Подкласс нажмите на didSelectRowAtIndexPath - PullRequest
2 голосов
/ 11 февраля 2012

У меня есть подкласс UITextView со свойством NSIndexPath, которое находится внутри UITableViewCell.Когда вы нажмете на него, я хотел бы иметь возможность позвонить didSelectRowAtIndexPath.

Вот что у меня есть:

UITapGestureRecognizer *singleFingerTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
[theTextView addGestureRecognizer:singleFingerTap];
singleFingerTap.delegate = self;

....

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

    CustomTextView *theTextView = (CustomTextView *)touch.view;

    NSLog(@"%@", theTextView.indexPath);


    return YES;

}

Я вижу из этот вопрос Возможно, мне даже придется сломать мою didSelectRowAtIndexPath логику, и это нормально.И я уже знаю путь индекса представления, к которому был подключен.

Как правильно вызвать этот метод tableView (или что будет делать didSelectRowAtIndexPath) из метода распознавателя жестов?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Я ответил на аналогичный вопрос здесь .Обычно при вызове:

[tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

табличное представление не запускает tableView:didSelectRowAtIndexPath: для делегата табличного представления, поэтому, кроме того, вы вынуждены вызывать напрямую (и так как вы написали код в методе делегата, естьнет проблем):

[tableView.delegate tableView:tableView didSelectRowAtIndexPath:path];

Кроме того, ваше прохождение nil для действия на самом деле не так, как распознаватели жестов, где это означает:

[[UITapGestureRecognizer alloc] initWithTarget:self action:nil];

Обычно вы делаете что-то подобное:

[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];

Это в основном говорит распознавателю жестов вызывать метод tapRecognized: при получении касания.Таким образом, в основном, чтобы обернуть все это (я предполагаю, что это в UITableViewController или объект со свойством с именем tableView, как UITableViewController s по умолчанию).

-(void)tapRecognized:(UITapGestureRecognizer *)tapGR{
    // there was a tap
    CustomTextView *theTextView = (CustomTextView *)tapGR.view;
    NSIndexPath *path = theTextView.indexPath;
    [self.tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];
    [self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:path];
}
1 голос
/ 11 февраля 2012

Если вам нужно сделать X как в ответ на жест, так и на нажатие на строку представления таблицы, просто создайте метод X и вызовите его как из метода распознавания жестов, так и из didSelectRowAtIndexPathметод делегата табличного представления.

Конечно, теоретически,

[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];

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

...