Ранее были аналогичные вопросы, и я упомянул Захват касаний на подвью вне рамки его супервизора, используя hitTest: withEvent: и Передача событий касания к виду за пределами его родительского вида. Но они, кажется, не отвечают на мою конкретную проблему.
У меня есть настраиваемый элемент управления со следующей структурой:
+-------------------------------+
| UIButton |
+-------------------------------+
| |
| |
| UITableView |
| |
| |
+------------------------- +
Пользовательский элемент управления переопределяет подкласс UIButton
и добавляет UITableView
в качестве своего подвид. Идея состоит в том, чтобы весь контрольный акт выглядел как выпадающий список. Когда нажата кнопка UIButton
, UITableView
выйдет и включит выбор.
Все это отлично работает с hitTest
, переопределенным в UIButton
, как описано в ссылке Apple Q & A выше, если элемент управления является непосредственным дочерним элементом самого верхнего UIView
. Однако, если элемент управления находится в другой иерархии представлений, UITableView
не получает события касания.
Ниже приведен код использования hitTest:
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
// Convert the point to the target view coordinate system.
// The target view isn't necessarily the immediate subview
let pointForTargetView = self.spinnerTableView.convertPoint(point, fromView:self)
if (CGRectContainsPoint(self.spinnerTableView.bounds, pointForTargetView)) {
// The target view may have its view hierarchy,
// so call its hitTest method to return the right hit-test view
return self.spinnerTableView.hitTest(pointForTargetView, withEvent:event);
}
return super.hitTest(point, withEvent: event)
}
Edit:
Я извиняюсь за то, что не смог посмотреть ответы и проверить, разрешают ли они проблему, из-за некоторых других задач, требующих немедленного внимания. Я проверю их и приму помощь. Благодарим за терпение.