2017-07-12 1 views
1

habe ich eine segmentierte Kontrolle in meinem Drehbuch, das wie folgt aussieht:IOS Segmented Steuerung: nicht ändern kann Ausgewählte Segment

enter image description here

Dann habe ich eine IBAction erstellt für wenn der Wert des Steueränderungen:

@IBAction func segmentValChanged(_ sender: UISegmentedControl) { 
    print("touched") 
    if (sender.selectedSegmentIndex == 0) { 
     sender.selectedSegmentIndex = 1; 
    } 
    else{ 
     sender.selectedSegmentIndex = 0; 
    } 
} 

Das einzige Problem ist, dass diese Funktion nie aufgerufen wird! Wenn ich auf die Schaltfläche Jokes (Beta) klicke, passiert nichts.

Allerdings, wenn ich eine IBOutlet für die Steuerung erstellt und versucht, das ausgewählte Segment in meinem viewDidLoad() zu ändern, es hat funktioniert:

segmentedController.selectedSegmentIndex = 1 

Ich weiß, dass ich wahrscheinlich etwas offensichtlich verpasst, da ich nie ein verwendet haben segmentierte Kontrolle vor. Vielen Dank, wenn jemand darauf hinweisen kann, was das ist. Prost!

import UIKit 
import Alamofire 

class ViewController: UIViewController { 

    var currentImage: CurrentImage! 

    var parameters: Parameters! 

    @IBOutlet weak var segmentedController: UISegmentedControl! 


    @IBAction func segmentValChanged(_ sender: UISegmentedControl) { 
     print("touched") 
     if (sender.selectedSegmentIndex == 0) { // switch to 1 
      sender.selectedSegmentIndex = 1; 
     } 
     else{ 
      sender.selectedSegmentIndex = 0; 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     segmentedController.selectedSegmentIndex = 1 
     self.segmentedController.addTarget(self, action: #selector(segmentValChanged(_:)), for: .valueChanged) 
    } 
} 

Und das ist, wie es aussieht, wenn ich die Ansicht der rechten Maustaste: enter image description here

+0

Haben Sie ** diese Funktion in IB an '.valueChanged' gebunden? – dfd

+0

Ja, ich habe das getan –

+0

Der Cosole druckt die "Touched" Nachricht? –

Antwort

3

Jedes Mal, wenn ich sehe das es fast immer das gleiche Problem ... Wenn die segmentierte Steuerung außen gezogen wird, der übergeordneten Ansicht, dann reagiert es nicht auf Taps. Dies ist wahrscheinlich das Problem, das Sie haben. (Dies kann auch mit UIButtons passieren.)

Möglichkeiten zu testen, ob dies das Problem ist:

  1. clipsToBounds der segmentierten Kontrolle der Eltern auf true gesetzt. Wenn das Steuerelement nicht mehr auf dem Bildschirm angezeigt wird, wird es außerhalb seiner übergeordneten Ansicht gezeichnet. segmentedControl.superview?.clipsToBounds = true

  2. fügen Sie dem übergeordneten Element des segmentierten Steuerelements einen Rahmen hinzu. Wenn die Kontrolle außerhalb der Grenze gezogen wird, dann gehst du. segmentedControl.superview?.layer.borderWidth = 1

Lösen Sie das Problem, indem sie die Größe der übergeordneten Ansicht erweitert, so dass die Steuerung innerhalb wobei es sich gezogen.


Nebenbei bemerkt ist Ihre IBAction falsch. Wenn die Aktion mit geändertem Wert aufgerufen wird, hat das segmentierte Steuerelement bereits seinen Wert geändert und das neue Segment wird hervorgehoben. Sie müssen es nicht manuell tun. Dies ist ein weiterer Hinweis darauf, dass Ihr Steuerelement nicht in den Grenzen der übergeordneten Ansicht gezeichnet wird.

+0

Vielen Dank Herr. Diese Antwort hat perfekt funktioniert. –

Verwandte Themen