2016-12-05 4 views
-1

Ich habe eine UISegmentedControl, die zwischen 3 Arten von Kartenansichten "Standard", ".Hybrid" und "Satellit" umschalten soll. Ich erhalte den folgenden Fehler in der Zeile ".addTarget". Zuweisen eines Ziels für UISegmentedControl Swift 3

"Editor Platzhalter in Quelldatei"

let segmentedControl = UISegmentedControl(items: ["Standard", "Hybrid", "Satellite"]) 
    segmentedControl.backgroundColor = UIColor.white.withAlphaComponent(0.5) 
    segmentedControl.selectedSegmentIndex = 0 

    // EVENT LISTENER FOR SEGMENT CONTROL 
    segmentedControl.addTarget(self, action: "mapTypeChanged:", for: .valueChanged) 

    func mapTypeChanged(segControl: UISegmentedControl){ 
     switch segControl.selectedSegmentIndex{ 
     case 0: 
      mapView.mapType = .standard 
     case 1: 
      mapView.mapType = .hybrid 
     case 2: 
      mapView.mapType = .satellite 
     default: 
      break 
     } 

    } 

Antwort

1
let segmentedControl = UISegmentedControl(items: ["Standard", "Hybrid", "Satellite"]) 
segmentedControl.backgroundColor = UIColor.white.withAlphaComponent(0.5) 
segmentedControl.selectedSegmentIndex = 0 

// EVENT LISTENER FOR SEGMENT CONTROL 
segmentedControl.addTarget(self, action: "mapTypeChanged:", for: .valueChanged) 

func mapTypeChanged() //removing the auto complete params 
{ 
    switch segControl.selectedSegmentIndex{ 
    case 0: 
     mapView.mapType = .standard 
    case 1: 
     mapView.mapType = .hybrid 
    case 2: 
     mapView.mapType = .satellite 
    default: 
     break 
    } 

} 

pls mit diesem versuchen ..

0

Ein paar Dinge hier passiert. Sie müssen #selector verwenden und die Deklaration Ihrer Funktion ändern, um die Benennung des ersten Arguments zu unterdrücken, andernfalls müssten Sie es auch im Selektor deklarieren.

let segmentedControl = UISegmentedControl(items: ["Standard", "Hybrid", "Satellite"]) 
    segmentedControl.backgroundColor = UIColor.white.withAlphaComponent(0.5) 
    segmentedControl.selectedSegmentIndex = 0 

// EVENT LISTENER FOR SEGMENT CONTROL 

segmentedControl.addTarget(nil, action: #selector(mapTypeChanged(_:)), for: .valueChanged) 

func mapTypeChanged(_ segControl: UISegmentedControl){ 

    switch segControl.selectedSegmentIndex{ 
    case 0: mapView.mapType = .standard 
    case 1: mapView.mapType = .hybrid 
    case 2: mapView.mapType = .satellite 
    default: break 
    } 
} 
+0

Ich bekomme eine neue Fehlermeldung: – dave

+0

„Verwendung von lokalen Variablen‚mapTypeChanged‘vor seiner Erklärung“ – dave

+0

Wo Sie diesen Code einfügen? In einem ViewController? –