2017-09-13 22 views
0

Ich habe eine segmentierte Steuerung. Es zeigt seltsamen Titel im ersten Segment. obwohl es manchmal nicht immer passiert, aber ich weiß nicht, welches Ding es auslöst. Autosize-Modus hier proportional zum Inhalt gesetzt sind die Schnappschüsse von iphone, Storyboard und automatischen Layout EinschränkungenSegmentsteuerelement zeigt seltsamen Titel im ersten Segment

Iphone

Storyboard storyboard

Automatische Anordnung Constraints Autolayout constraints

I SegmentedControl erweitert haben ein erfüllen bestimmte Voraussetzung hier ist der Code

class CustomSegmentedControl: UISegmentedControl { 
    var current = 0 
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     current = self.selectedSegmentIndex 
     super.touchesBegan(touches, with: event) 
    } 
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     super.touchesEnded(touches, with: event) 
     if current == self.selectedSegmentIndex{ 
      self.sendActions(for: .valueChanged) 
     } 
    } 
} 

Viewcontroller

class MatchingViewController: UIViewController { 

    @IBOutlet weak var containerView: UIView! 
    @IBOutlet weak var segmentControl: UISegmentedControl! 
    @IBOutlet weak var searchHolder: UIView! 
    @IBOutlet weak var searchTextField: UITextField! 
    @IBOutlet weak var searchButton: UIButton! 

    enum tabEnum: Int { 
     case all = 0 
     case iceBreaker 
     case tagged 
     case connected 
    } 
    enum buttonTags: Int{ 
     case searchButton = 101 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     setupTags() 
     setupActions() 
     setupSegmentControl() 
     setupSearchBar() 


    } 


    func setupTags(){ 
     self.searchButton.tag = buttonTags.searchButton.rawValue 
    } 
    func setupActions(){ 
     self.searchButton.addTarget(self, action: #selector(self.didSelect(_:)), for: .touchUpInside) 
    } 
    func setupSearchBar() { 
     self.searchButton.setTitleColor(UIColor.darkGreen(), for: []) 
     self.searchHolder.layer.borderWidth = 1 
     self.searchHolder.layer.borderColor = UIColor.darkGreen().cgColor 
     self.searchHolder.layer.cornerRadius = 5 
     self.searchTextField.delegate = self 
    } 

    func setupSegmentControl() { 
     segmentControl.addTarget(self, action: #selector(self.didSelectTab(_:)), for: .valueChanged) 
     didSelectTab(segmentControl) 
    } 



    func didSelectTab(_ sender: UISegmentedControl) { 
     let value = sender.selectedSegmentIndex 
     self.segmentControl.tintColor = UIColor.darkGreen() 

     print("selectedIndex \(value)") 
     let storyBoard = Global.sharedInstance.storyboard 
     let storyBoardId = value == 0 ? "FirstViewControllerID" : "SecondViewControllerID" 
     vc = storyBoard.instantiateViewController(withIdentifier: storyBoardId) 

     if let vc = vc { 
      vc.setValue(self, forKey: "parentController") 
      vc.setValue(value, forKey: "tabIndex") 
      self.containerView.subviews.forEach({ $0.removeFromSuperview() }) 
      self.containerView.addSubview(vc.view) 
      vc.view.translatesAutoresizingMaskIntoConstraints = false 
      addChildViewController(vc) 
      NSLayoutConstraint.activate([ 
       vc.view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor), 
       vc.view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), 
       vc.view.topAnchor.constraint(equalTo: containerView.topAnchor), 
       vc.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) 
       ]) 
      vc.didMove(toParentViewController: self) 

     } 
    } 


    func didSelect(_ sender: UIButton){ 
     if let tag = buttonTags.init(rawValue: sender.tag){ 
      switch tag { 
      case .searchButton: 
       self.searchTextField.endEditing(true) 
       startSearch() 
      } 
     } 
    } 
} 
+0

Zeigen Sie Ihren View-Controller-Code, der CustomSegmentedControl zugeordnet ist – Krunal

+0

Dies sieht wie ein Schlüssel aus der Lokalisierung aus. Sind deine Storyboards lokalisiert? Haben Sie auf dem Gerät eine andere Sprache/Region eingestellt? – Losiowaty

+0

@Krunal Ich habe meinen Code aktualisiert. –

Antwort

2

Hinter den Kulissen Xcode baut localizable.strings-Dateien für Ihre Storyboards, die die Saiten für Ihre Ansicht Objekte Einträge mit Objekt-IDs zuordnen. Was Sie anzeigen, sieht wie der String-Name einer dieser Zeichenfolgen aus. Wenn Sie die .strings-Datei Ihres Storyboards bearbeiten und eine dieser Zeichenfolgenzuordnungen ändern (z. B. "KkS-S7-SCw.segmentTitle" = "All"), erhalten Sie möglicherweise genau die Ergebnisse, die Sie sehen. Meine Vermutung ist eine Art Chaos mit den lokalisierbaren Strings, die für Storyboards unter der Oberfläche liegen.

+0

Danke für die Information.Lemme mit den Saiten spielen und zurück zu dir –

+0

Ich überprüfte die Saite und versuchte zu modifizieren scheint gut. wenn ich es das erste Mal öffne, sieht es aus wie

2

Sieht aus wie es etwas über den "Objekt-ID" (auf dem Bild blauer Pfeil) des SegmentedControl ist. Überprüfen Sie, ob das Attribut "Class" in Interface Builder mit Ihrer Unterklasse richtig eingestellt ist (roter Pfeil im Bild).

Überprüfen Sie, ob das Problem mit der Standardklasse weiterhin auftritt. Wenn es das Problem löst, sollte der Fehler in Ihrem Unterklasse-Code sein. Wenn nicht, wird es noch seltsamer.

Class and Object ID properties locations

+0

ist Dieser seltsame Titel ist in der Tat Objekt-ID. Ich habe es nur überprüft. aber die Klasse wurde richtig gegeben. Wie @Krunal in Kommentaren vorgeschlagen habe, habe ich in meinem Viewcontroller eine falsche IBOutlet-Klasse angegeben. Das könnte der Grund sein, warum es mir gezeigt hat. Ich kann es jetzt nicht bestätigen. Da dies sehr selten vorkommt. Während dieser Frage lief ich das Projekt und es funktionierte gut –

+0

Es gibt die Möglichkeit, dass es ein Problem im Zusammenhang mit XCode selbst und dem Bauprozess ist ... Manchmal Reinigung des Projekts (shift + Befehl + K) und den Build-Ordner (Option + Shift + Befehl + K) löst einige seltsame und unerklärliche Probleme –

+0

Das ist Laufzeit bro. Der Build wurde auf diawi.com hochgeladen und derselbe Build wurde zweimal auf diesem Telefon installiert. Das erste Mal funktionierte es wie erwartet, zum zweiten Mal gibt es den Objekt-ID Titel –

Verwandte Themen