2017-10-30 2 views
0

Ich habe ein UIBarButtonItem und ich pushViewController in einer anderen Klasse. So habe ich diese Codezeile in viewDidLoad:UIBarButtonItem -> unerkannter Selektor an Instanz gesendet (Swift 4)

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named:"settings"), style: .plain, target: self, action: #selector(GoToPages.goToSettings(_:))) 

Das ist meine GoToPages Klasse:

import UIKit 

class GoToPages: UIViewController { 

    @objc func goToSettings(_ sender:UIBarButtonItem) { 

     let button = sender 

     switch button.tag { 
     case 0: 
      let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Notifications") 
      self.navigationController?.pushViewController(settingsPageView!, animated: true) 
     case 1: 
      let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Settings") 
      self.navigationController?.pushViewController(settingsPageView!, animated: true) 
     default: 
      return 
     } 
    } 
} 

Aber ich erhalte eine Fehlermeldung: Unbekannter Selektor an Instanz gesendet.

+0

Welche Klasse ist die erste Zeile des Codes in? Mit anderen Worten, was genau ist "selbst" beim Erstellen des Button-Objekts? – rmaddy

Antwort

1

Der Wert des Parameters target muss die Instanz der Klasse der action in implementiert.

self impliziert, dass die action in der aktuellen Klasse implementiert wird.

+0

Also, was wird der richtige Code sein? Ich habe versucht, Ziel: GoToPages.self, aber es funktioniert nicht ... – Flincorp

+0

Ich schrieb: * ... muss die ** Instanz ** der Klasse * sein. Sie benötigen den Verweis auf die aktuelle Instanz von 'GoToPages'. – vadian

+0

Jetzt habe ich versucht: self.navigationItem.rightBarButtonItem = UIBarButtonItem (Bild: UIImage (mit dem Namen: "Einstellungen"), style: .plain, Ziel: GoToPages(), Aktion: #selector (GoToPages.goToSettings (_ :))) Kein Fehler jetzt, aber ich beziehe mich an, wenn ich auf das Element der Balkenschaltfläche klicke ... – Flincorp

0

Mein Code:

Import UIKit

Erweiterung UIViewController {

@objc func goToPage(_ sender: Any) { 

    guard let button = sender as? UIBarButtonItem else { 
     return 
    } 

    switch button.tag { 
    case 0: 
     let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Notifications") 
     self.navigationController?.pushViewController(settingsPageView!, animated: true) 
    case 1: 
     let settingsPageView = self.storyboard?.instantiateViewController(withIdentifier: "Settings") 
     self.navigationController?.pushViewController(settingsPageView!, animated: true) 
    default: 
     return 
    } 
} 
Verwandte Themen