Frage

Ich habe Probleme, meine zu bekommen UIButtons, UIScrollViews usw. in dieser Situation arbeiten:

Ich habe die Basis UIViewController, das ist der Wurzelcontroller der UIWindow. Über dieser Schicht habe ich andere UIViews Hinzugefügt, was ich die "mittlere Schichtansicht" nennen werde. Und oben habe ich noch einen UIView Für Overlay -Objekte hinzugefügt.

Die mittlere Schichtansicht wird für verschiedene Ansichten regelmäßig geändert. Das UIView es verwendet ist von a UIViewController, gemacht von einer NIB -Datei. Hier ist ein Beispiel

if ( mode == eModeShowView1 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View1"...
else if ( mode == eModeShowView2 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View2"...

[UIView insertSubview:nextController.view below:m_overlayView];

Wenn ich jetzt auf dem Bildschirm berühre, ist der Ersthelfer offensichtlich der OverlayView oder irgendein UIResponder auf der OverlayView Das wurde berührt. Das UIEvent der Berührungseingabe geht die Ansichtskette nach oben, scheint aber die mittlere Schichtansicht und die zu überspringen UIResponders auf diesem UIView insgesamt. Es springt direkt zur Wurzel UIViewController.

Weiß jemand, was hier los ist?

Könnte es gelöst werden, indem er irgendwie zwei erstellt UIEvents? Eine für die Overlay -Ansicht und eine für die mittlere Schichtansicht? Ist das möglich? Wenn das so ist, wie?

Jede Hilfe wäre am meisten geschätzt. Danke, reich

War es hilfreich?

Lösung

edit1 Start:

Sie können den M_OverlayView und initWithTarget: Ihre Middleview-Aktion: SOME-Methode-in-Middleview einen Uitapgester-Ekognizer einsetzen: Ihre Middleview-Aktion

In Ihrem MiddleView können Sie nun erkennen.

edit1 Ende:

Sie können es debuggen. Verwenden Sie einfach die Protokolle in touchesbegan In all Ihren Controllern. Es wird durch Protokolle der Abfolge der Berührungsantworten klar sein.

OK .. Also kann diese Beschreibung der Methode aus der Dokumentation Sie beantworten. Dein m_overlayView und nextController.view sind einander als Geschwister und nicht als Übersicht. Ihre Berührung bei einem von ihnen wird also nicht dem anderen, sondern der Basis gemeldet superview Das ist üblich superview zu beiden Geschwistern.

Daher bekommen Sie, dass die mittlere Schicht umgangen wird. Eigentlich ist Ihre Mittelschicht ein Geschwister und kein Überblick mehr. Hoffe das gibt dir zumindest einen Weg voraus;)

insertSubview:belowSubview:

Fügt eine Ansicht unter einer anderen Ansicht in die Ansichtshierarchie ein.

(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview

Parameter:

view

Die Ansicht, die unter einer anderen Ansicht einfügt. Es ist von seinem entfernt superview Wenn es kein Geschwister von Geschwistern ist.

Geschwistern:

Die Geschwisteransicht, die über der eingefügten Ansicht liegt.

Diskussion:

Diese Methode behält die Ansicht bei und setzt ihren nächsten Responder auf den Empfänger, der neue ist superview.

Ansichten können nur eine Übersicht haben. Wenn die Ansicht bereits eine hat superview Und diese Ansicht ist nicht der Empfänger, diese Methode entfernt die vorherige Methode superview Bevor der Empfänger neu macht superview.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top