2017-09-13 56 views
0

我有一個分段控件。它在第一部分顯示奇怪的標題。雖然它有時並不總是發生,但我不知道哪個事件觸發了它。自動調整模式設置爲正比於內容 這裏是iphone,故事情節和自動佈局約束快照分段控件在第一段顯示奇怪標題

Iphone

故事板 storyboard

自動佈局約束Autolayout constraints

我已經延長SegmentedControl履行這裏的某些要求是代碼

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

顯示您的視圖控制器代碼,與CustomSegmentedControl相關聯 – Krunal

+0

這看起來像是本地化的關鍵。你的故事板是本地化的嗎?你在設備上設置了不同的語言/地區嗎? – Losiowaty

+0

@Krunal我已更新我的代碼。 –

回答

2

在幕後,Xcode中建立localizable.strings文件鏡腳本,使用對象ID爲您的視圖對象的字符串映射到項。您顯示的內容看起來像是其中一個字符串的字符串名稱。如果您編輯故事板的.strings文件並更改其中一個字符串映射(如"KkS-S7-SCw.segmentTitle" = "All"),那麼您可能會看到您看到的結果。我的猜測是某些與故事板表面下可本地化的字符串混亂的東西。

+0

感謝您的信息。讓我和絃一起玩,然後回到你身邊 –

+0

我檢查了字符串,並試圖修改看起來很好。當我第一次打開它看起來像

2

看起來像它的一些關於SegmentedControl的 「對象ID」(圖像藍色箭頭)。 驗證是否在Interface Builder中使用您的子類正確設置了「Class」屬性(圖像上的紅色箭頭)。

檢查默認類是否繼續發生問題。 如果它解決了這個問題,那麼錯誤應該在你的子類代碼中。 如果不是,它會更奇怪。

Class and Object ID properties locations

+0

奇怪的標題確實是對象ID。我剛剛檢查過。但班級得到了恰當的處理。正如@Krunal在評論中所建議的,我在我的視圖控制器中給出了錯誤的IBOutlet類。這可能是它向我展示的原因。我現在無法驗證。這很少發生。在提出這個問題時,我運行了該項目並且工作正常 –

+0

有可能是與XCode本身和構建過程相關的問題... 有時清理項目(shift + command + K)和構建文件夾(option + shift + command + K)解決了一些奇怪和無法解釋的問題 –

+0

發生了運行時間錯誤。該版本上傳到diawi.com,並在該手機上安裝了兩次相同的版本。第一次第二次按預期工作時,它給出的對象ID標題 –