2017-09-13 7 views
0

私は1つのセグメント化されたコントロールを持っています。それは最初のセグメントで奇妙なタイトルを示しています。ときどき起こることはありませんが、私はどの事がそれを引き起こすのか分かりません。自動サイズ調整モードは、ここでコンテンツ に比例に設定されているiphone、ストーリーボードや自動レイアウト制約のスナップショットがセグメント化されたコントロールが最初のセグメントに奇妙なタイトルを表示しています

Iphone

あるストーリーボード storyboard

私が満たすためにSegmentedControlを拡張してきた自動レイアウトの制約Autolayout constraints

ここでの特定の要件はコードです

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) 
     } 
    } 
} 
それはSegmentedControlの "オブジェクトID"(画像上の青い矢印)について何かのように

の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

CustomSegmentedControlに関連付けられたビューコントローラコードを表示 – Krunal

+0

これはローカリゼーションのキーのようです。あなたのストーリーボードはローカライズされていますか?この問題が発生したデバイスに異なる言語/地域が設定されていますか? – Losiowaty

+0

@Krunalコードを更新しました。 –

答えて

2

、Xcodeは、オブジェクトIDを使用してエントリにあなたのビュー・オブジェクトの文字列をマップあなたのストーリーボード用のLocalizable.stringsファイルを作成します。あなたが示すものは、それらの文字列の文字列名のように見えます。ストーリーボードの.stringsファイルを編集し、それらの文字列マッピングの1つ("KkS-S7-SCw.segmentTitle" = "All"など)を変更すると、表示されている結果が得られる可能性があります。私の推測は、Storyboardsのための表面の下にあるローカライズ可能な文字列でいくつかの種類の混乱です。

+0

に感謝しました。文字列を使って演奏して、あなたに戻ってください。 –

+0

文字列をチェックして、修正しようとしましたが問題ありません。 <セグメントタイトル= "タグ" /> <セグメントタイトル= "接続済み" /><セグメントタイトル= "すべて" /> –

2

が見えます。 Interface Builderでサブクラスで「Class」属性が正しく設定されているかどうかを確認します(イメージ上の赤い矢印)。

デフォルトクラスで問題が引き続き発生するかどうかを確認してください。 問題が解決する場合は、エラーがサブクラスコードに含まれている必要があります。 そうでなければ、それは見知らぬ人でもあります。舞台裏

Class and Object ID properties locations

+0

その奇妙なタイトルは確かにオブジェクトIDです。私はちょうどチェックした。クラスは適切に与えられました。 @ Krunalはコメントで、私のviewcontrollerで間違ったIBOutletクラスを与えていることを示唆しました。それが私に示された理由かもしれません。私は今確証することができません。これは非常にまれです。この質問を投げている間に私はプロジェクトを実行して正常に動作していました –

+0

XCode自体とビルドプロセスに関連する問題である可能性があります... 時にはプロジェクトのクリーニング(shift + command + K)とビルドフォルダ(option + shift + command + K)は、奇妙で説明できない問題を解決します –

+0

これは実行時の仲間でした。ビルドはdiawi.comにアップロードされ、同じビルドがその電話機に2回インストールされました。最初にオブジェクトIDタイトル –

関連する問題