TouchUpInside на UIView с детьми
возможно, я что-то упускаю здесь, но...
у меня есть UIView
с несколькими детьми (пару UILabel
и UIImageView
). Мне нужно поймать событие, когда пользователь нажимает (нажимает) в любом месте родительского UIView
- видимая часть UIView
или любой из его детей).
каков наилучший способ сделать это?
4 ответов
вы можете изменить класс UIView в Инспекторе удостоверений... сделай это!--0--> и затем вы можете добавить событие для UITouchUpInside
для вашего вида-поймать краны на нем.
удачи!
EDIT: вот шаг за шагом со скриншотами:
вид...
... конечно, никаких событий.
вернитесь и измените UIView с помощью UIControl and...
та-даа! События!
крюк a способ события UITouchUpInside
вот как это должно выглядеть в файле интерфейс
вот как это должно выглядеть в файле реализации (вы можете, конечно, заменить ведение журнала на все, что хотите)
вы можете симулировать это поведение, имея распознаватель жестов для вашего родительского представления и гарантируя, что у ваших детей нет своих собственных распознавателей жестов. Для этого добавьте распознаватель жестов к вашему родителю UIView
это прослушивает краны. Где parentView
- это содержащее представление для ваших дочерних представлений (UILabels
/UIImageView
) и handleTap
- это метод, реализованный parentView
, сделать что-то вроде:
UIGestureRecognizer *tapParent = [[UITapGestureRecognizer alloc]initWithTarget:parentView action:@selector(handleTap)];
[parentView addGestureRecognizer:tapParent];
[tapParent release];
как ваши взгляды ребенка не имеют собственных жест recognisers они не "ешьте" жест, и поэтому родительский вид будет реагировать, пока вы нажимаете в его пределах.
вы должны дать немного больше деталей, потому что есть несколько вариантов.
Если вы хотите обычный кран, вы можете поймать одно из стандартных событий касания и посмотреть, какое подвидение получило событие. Что-то вроде этого:--2-->
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if(touch.view != self.mySubViewOfInterest)
{
// perform my actions
}
}
Если вам нужно сложное распознавание жестов, вы можете использовать один из UIGestureRecognizer и назначить его подвидам или главному виду.
в любом случае вы должны обратить внимание, что все подвиды (те, которые вы хотите, чтобы они поймали event) должно быть включено взаимодействие с пользователем, иначе ваше основное представление также захватит события для подвидов, и вы закончите отладку и отладку, не понимая, что происходит.
это работает для меня
Swift 3
let gesture = UITapGestureRecognizer(target: self, action: selector(self.customViewClick))
withSender: self)
customView.addGestureRecognizer(gesture)
func customViewClick() {
print("custom view clicked!")
}