как обнаружить прикосновения на фоне панели инструментов UINavigationController - PullRequest
3 голосов
/ 09 августа 2011

Я хотел бы обнаружить касания (или просто касание) на фоне панели UIToolbar, предоставляемой UINavigationController. Вещи, которые я пробовал, которые не работают (или которые я не мог заставить работать):

  • добавление UITapGestureController к UIToolbar - это не удается, потому что, хотя он обнаруживает касание, он потребляет касания, поэтому кнопки на панели инструментов перестают работать (так как они не получают касаний)
  • установка цели и действия для UIBarButtonItem, который является UIBarButtonSystemItemF FlexibleSpace - гибкие пробелы, похоже, не воспринимают касания (что кажется достаточно справедливым)

То, что я хочу, это обнаружить любое касание, которого нет на кнопке. Учитывая, что я не могу установить панель инструментов для UINavigationController (он доступен только для чтения), поэтому я не могу заменить свой собственный подкласс UIToolbar, есть ли уловка / обходной путь, который мне не хватает?

1 Ответ

4 голосов
/ 09 августа 2011

Следующий код помогает:

CGSize toolbarSize = [[[self navigationController] toolbar] frame].size;
UIControl* backgroundControl = [[UIControl alloc] initWithFrame: CGRectMake(0, 0, toolbarSize.width, toolbarSize.height)];
[backgroundControl addTarget:self action:@selector(toolbarBackgroundTap) forControlEvents:UIControlEventTouchDown];
[backgroundControl setAutoresizingMask: [[[self navigationController] toolbar] autoresizingMask]];
[[[self navigationController] toolbar] insertSubview:backgroundControl atIndex:0];
[backgroundControl release];

@ bdares - спасибо за предложение в вашем комментарии.Это было очень полезно.

...