iPhone: захват точки касания в UITableViewController - PullRequest
3 голосов
/ 21 января 2012

Я хочу захватить x положение точки touch в UITableViewController . Самое простое решение, описанное в Интернете: UITapGestureRecognizer : введите описание ссылки здесь

Но в этом случае didSelectRowAtIndexPath останавливаются.

Как использовать оба события или как получить (NSIndexPath *) indexPath параметр внутри singleTapGestureCaptured ?

Привет

[править] Я не могу ответить на мой вопрос. Решение:

NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: touchPoint]

Ответы [ 3 ]

2 голосов
/ 16 января 2014

Я сомневаюсь, что ОП все еще ждет ответа, но для будущих искателей:

Вы можете захватить событие касания внутри ячейки, действовать, затем либо отменить его, либо передать егоцепь:

@interface MyCell : UITableViewCell
// ...
@end

@implementation MyCell
// ...

- (void) touchesBegan: (NSSet*) touches withEvent: (UIEvent*) event
{
    UITouch* touch = [[event allTouches] anyObject];
    CGPoint someLocation = [touch locationInView: someView];
    CGPoint otherLocation = [touch locationInView: otherView];
    if ([someView pointInside: someLocation: withEvent: event])
    {
        // The touch was inside someView. Do some stuff, 
        // but don't invoke tableView:didSelectRowAtIndexPath: on the delegate.
    }
    else if ([otherView pointInside: otherLocation: withEvent: event])
    {
        // The touch was inside otherView. Do other stuff.

        // Send the touch on for processing, and tableView:didSelectRowAtIndexPath: handling.
        [super touchesBegan: touches withEvent: event];
    }
    else
    {
        // Send the touch on for processing, and tableView:didSelectRowAtIndexPath: handling.
        [super touchesBegan: touches withEvent: event];
    }
}
@end
0 голосов
/ 08 мая 2019

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = ...;

    // Do this once for each cell when setting up the new cells...
    UITapGestureRecognizer *cellTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                        initWithTarget:self
                                                        action:@selector(cellTapGesture:)];
    [cell.contentView addGestureRecognizer:cellTapGestureRecognizer];

    // ...
    return cell;
}

Обработайте касание или передайте его didSelectRowAtIndexPath:

- (void)cellTapGesture:(UITapGestureRecognizer *)sender
{
    CGPoint touchPoint = [sender locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:touchPoint];
    rightBOOL = ( touchPoint.x > self.tableView.contentSize.width/2 ); // iVar

    // The UITapGestureRecognizer prevents didSelectRowAtIndexPath, so procees
    // the touch here.  Or, since only one row can be selected at a time,
    // call the old code in didSelectRowAtIndexPath and let it access
    // rightBOOL as an iVar (or pass it some other way).  Anyway, x location is known.
    [self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
}
0 голосов
/ 21 января 2012

Нельзя добавить распознаватель жестов, не испортив обработку табличных представлений касанием событий.

Вы не говорите точно, чего пытаетесь достичь, поэтому невозможно рекомендовать альтернативу. Все, что связано с захватом сенсорных событий, будет сложным: цепочка респондента сложна.

Кажется, что простым способом было бы перегрузить didSelectRowAtIndexPath в дочернем классе и делать все, что вы хотите, перед вызовом super ...

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