2013-07-22 3 views
0

В документе Apple, говорит, что процесс для обработки жест являетсяПочему UITableView получит жест панорамы?

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

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

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

  4. Контроллер представления пытается обработать событие, и если он не может, передает событие в окно.

  5. Если объект окна не может обработать событие, он передает событие в объект приложения singleton.

  6. Если объект приложения не может обрабатывать событие, он отбрасывает событие.

Однако, в моем случае, у меня есть подкласс UITableViewController в качестве корневой В окна и добавить представление, чтобы покрыть весь экран следующим образом:

@interface MyTableViewController : UITableViewController() 
@end 

@implementation MyTableViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds]; 
    redView.backgroundColor = [UIColor redColor]; 
    [self.view addSubview:redView]; 
} 

I подумайте, что redView будет хитом-тестом, если я коснусь экрана, чтобы создать жест панорамы, и потому что redView не справится с этим, он передаст событие касания в его супервизор, что также является супервидом tableView. В результате, tableview не будет обрабатывать жест жеста. Тем не менее, tableView все еще может обрабатывать жест панорамы, может ли кто-нибудь объяснить это?

ответ

2

Если ваш контроллер представления является UITableViewController, то superview из redView бы быть UITableView, поэтому, когда redView не обрабатывает жест, он прошел к своему superview, поэтому UITableView получает (и процессы) жест.

0

Если кто-то еще ищет более простое решение здесь это: UITableView имеет свойство с именем panGestureRecognizer так в верхнем окне вы просто прямо этот код:

[self.upperView addGestureRecognizer:self.tableView.panGestureRecognizer]; 

так что таблица прокрутки события получает передается к настольному изображению

Смежные вопросы