2017-08-28 7 views
7

Ich habe Xcode9 Beta6 verwendet, um das Projekt zu erstellen, wurde die Aktion korrekt auf iOS10-Gerät aufgerufen, jedoch ist es nicht auf iOS11-Gerät arbeiten.iOS11 UIBarButtonItem Aktion nicht erhalten

In meinem Projekt gibt es einige ViewControllers, die oben eine UIToolBar haben, und die ToolBar enthält einige UIBarButtonItems.

Es gibt eine dieser Art von ViewController, deren UIBarButtonItem-Aktion nicht aufgerufen wird, wenn ich auf UIBarButtonItem tippe. Ich kann die Klopfanimation sehen (das Symbol wird zuerst dunkel und dann wieder normal, nachdem der Finger losgelassen wurde)

Am Ende von viewDidLoad drucke ich die Info von toolbar.items, um anzuzeigen, dass die Zielaktion richtig eingestellt ist.

Debug Output

+2

Kan Chen, hast du das Problem gelöst? – Cata

+1

Haben Sie Gestenerkenner in Ihrem ViewController? Es verursachte ein Problem in meinem Fall. Ich weiß immer noch nicht, wie ich damit umgehen soll. –

+2

@AlexBlack Ja, habe ich. Ich füge einen TapGestureRecognizer in viewControllers 'view' hinzu, und die UIToolbar ist eine Unteransicht der 'view' des ViewControllers. Da sich die Symbolleiste und ihr barItem oben auf der "Ansicht" befinden, sollte das Tippereignis zuerst von barItem abgefangen werden. Ich habe bereits ein Beispielprojekt gemacht, um dies Apple zu demonstrieren. Hoffe, sie können mir eine Antwort geben, also kann ich hier posten. –

Antwort

3

löste ich dieses Problem durch einen aktuellen Gestenerkenner aus meiner Sicht zu entfernen und einen neuen hinzufügen. Dann habe ich den Verbindungsinspektor meiner Ansicht geöffnet und die geskeRecognizer-Verbindung zu meinem Gestenerkenner hinzugefügt.

1

Apple hat diesen Fehler bestätigt. Meine temporäre Lösung ändert den Gestenerkennerbereich durch Entfernen des Überlappungsbereichs, sodass die Tippgeste nicht das Tippereignis auf UIBarButtonItem blockiert.

-2

Markieren Sie die Methode, die Sie sind Targeting bei mit @objc.

+0

Dieses Problem ist nicht spezifisch für Swift lang. Es ist eigentlich für iOS 11 ob Obj-C oder Swift. –

+0

@iOSCuriosity Basierend auf der Beschreibung des OP habe ich eine Antwort für diese Art von Problem gegeben (da im Xcode 9 mit dem neuen Swift Selektoren etc. mit '@ objc' gekennzeichnet werden sollten, wenn Sie es selbst verwalten). Es muss dem OP nicht nur helfen. –

0

Es passiert nur für iOS 11 und wenn benutzerdefinierte UIView für rightBarButtonItem (oder auch links) verwendet. Wenn Sie UIBarButtonItem verwenden, dann wird es gut funktionieren. Es gibt 0 Breite dieses benutzerdefinierten Balkenelements, also müssen wir es auf etwas einstellen.

In viewDidLoad dieses Controllers Sie Code hinzufügen können, können Sie 100 bis etwas ersetzen, was für Sie arbeiten:

if let view = self.navigationItem.rightBarButtonItem?.customView { 
    view.widthAnchor.constraint(equalToConstant: 100).isActive = true 
} 

Mindestens als einfache Notlösung es in Ordnung ist.

0

In meinem Fall war das Problem ein GestureRecognizer auf die gesamte Hauptansicht hinzugefügt (um die Tastatur zu schließen) wie folgt aus:

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeKeyboard)]; 
[self.view addGestureRecognizer:gesture]; 

Das Gestenerkenner den Hahn auf dem UIBarButtonItem außer Kraft gesetzt, damit ich durch gelöst Erstellen einer neuen Unteransicht, die direkt unter der Navigationsleiste platziert wird, und Zuweisung der Gestenerkennung an diese Ansicht und nicht an die gesamte Hauptansicht.

Verwandte Themen