Erkennen, ob bestimmte UIView berührt wurde unter anderem UIViews
Ich habe 3 UIViews, geschichtet oben auf einem großen uiview. Ich möchte wissen, ob der Benutzer berührt die Obere und kümmern sich nicht um die anderen. Ich habe ein paar von Schaltflächen, die in der zweiten UIView und eine UITable in der 3. UIView.
Problem ist Wende ich mich userInteractionEngabled auf den ersten Blick und das funktioniert, aber alle anderen Ansichten auf die gleiche Weise reagieren, auch wenn ich schalten Sie es aus. Wenn ich deaktivieren userInteractionEnabled auf selbst.Aussicht keiner von Ihnen reagieren. Ich kann auch nicht erkennen, welche Ansicht berührt wurde, in die touchesBegan delegate-Methode.
Mein code:
UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 150)];
aView = userInteractionEnabled = YES;
[self.view addSubview:aView];
UIView *bView = [[UIView alloc] initWithFrame:CGRectMake(0, 150, 320, 50)];
bView.userInteractionEnabled = NO;
[self.view addSubview:bView];
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//This gets called for a touch anywhere
}
InformationsquelleAutor der Frage Rudiger | 2010-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu überprüfen, ob bestimmte Ansicht in eine andere Ansicht war, berührte Sie können die Methode hitTest.
In Ihre benutzerdefinierte Implementierung von touchesBegan, überprüfen Sie jeden berühren, berührt setzen. Den Punkt für die hitTest-Methode erhalten werden können über
Methode, wo die Aussicht ist Ihre superView (eine, die enthält auch andere Ansichten).
EDIT: Hier ist eine schnelle benutzerdefinierte Implementierung:
Ich hoffe das war hilfreich,
Paul
InformationsquelleAutor der Antwort Pawel
In meinem Fall die UIView ich finden wollte, wurde nicht zurückgegeben von der hitTest. Aber der folgende code funktionierte besser:
InformationsquelleAutor der Antwort rgadbois
Dies ist auch die folgende Art und Weise.
Zuerst die Position der Berührung in der Ansicht, die Sie interessieren:
Dann sehen, wenn der Punkt innerhalb der Grenzen, die der Ansicht:
Dann, wenn es sich in Grenzen, führen Ihre Aktion.
Diese kann getan werden, mit einer Aussage, die beispielsweise verwendet werden kann, direkt in einer if-Anweisung:
InformationsquelleAutor der Antwort Ben Baron
swift-code:
InformationsquelleAutor der Antwort Karthi Keyan
In touchesBegan überprüfen Sie, dass die berührte Ansicht ist die, die Sie wollen, das problem bei mir gelöst, als ich versucht habe, erkannt, wenn der Benutzer berührt eine bestimmte Bildansicht.
Wenn Sie passen Sie die Inhalte für die Ansicht diamensions stellen Sie sicher, dass Sie zum ändern der Ansicht Größe entsprechend, sonst wird es erkennen, touch-Ereignis selbst in den Bereichen, wo es im Inhalt der Ansicht. In meinem Fall, wenn ich habe versucht, die Bild-Anteil mit UIViewContentModeScaleAspectFitobwohl das Bild eingestellt wurde, wie Sie in den "white spaces" - Gebiete berühren Veranstaltung wurden gefangen als gut.
InformationsquelleAutor der Antwort Pichirichi
Mein swift version, um zu überprüfen, dass die Berührung erfolgte in infoView vor:
InformationsquelleAutor der Antwort KerCodex
Dieser arbeitete für mich:
InformationsquelleAutor der Antwort Andrew Anthony Gerst