почему мы не можем обнаружить логику UITouch в UITableView, Objective C

Я искал, но не совсем понимаю, почему мы не можем обнаружить UITouch в UITableView. Сейчас у меня есть: контроллер представления с табличным представлением, расположенным в его представлении. Пожалуйста, посмотрите на картинку ниже для справки

введите здесь описание изображения

В классе реализации я включаю точку останова для каждого метода UITouch, который

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

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

Я не понимаю это. Я думал, что UITableView является подклассом UIScrollView, который является подклассом UIView, который является подклассом UIResponder. Это означает, что UITouch должен быть вызван. (поправьте меня, если я ошибаюсь)

Все комментарии приветствуются и приветствуются здесь.


person tranvutuan    schedule 25.08.2013    source источник


Ответы (4)


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

person Wain    schedule 25.08.2013

Вы можете обнаружить метод касания в UITableView, подклассировав его следующим образом: я тестирую его, и он успешно печатает "Test"

//TestTable.h

#import <UIKit/UIKit.h>

@interface TestTable : UITableView

@end

//TestTable.m

#import "TestTable.h"

@implementation TestTable
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  NSLog("Test");
}
person Hossam Ghareeb    schedule 25.08.2013

Таблицы используют представления прокрутки для управления панорамированием, которые используют распознаватель жестов панорамирования. Почему бы просто не воспользоваться этим?

CGPoint location = [self.tableView.panGestureRecognizer locationInView:self.tableView];
person Mick MacCallum    schedule 25.08.2013

Если вы хотите обнаруживать прикосновения к UITableView, создайте подкласс tableview и добавьте метод реализации UIResponder, canBecomeFirstResponder.

@interface MyTableView: UITableView
@end

@implementation: MyTableView
  - (BOOL) canBecomeFirstResponder{
    return YES;
  }

  // then implement all other touch related methods, remember to call super in these methods
  // such that it correctly forwards the events to other responders
  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    // 
  }

  - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

  }

  - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

  }

  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

  }
@end
person Sandeep    schedule 25.08.2013