Ios 分段控件在第一段中显示奇怪的标题

Ios 分段控件在第一段中显示奇怪的标题,ios,iphone,swift3,Ios,Iphone,Swift3,我有一个分段控件。它在第一节显示了奇怪的标题。虽然有时会发生,但我不知道是什么触发了它。自动调整大小模式设置为与内容成比例 以下是iphone、情节提要和自动布局约束的快照 故事板 自动布局约束 我扩展了SegmentedControl以满足特定的要求,下面是代码 class CustomSegmentedControl: UISegmentedControl { var current = 0 override func touchesBegan(_ touches: Se

我有一个分段控件。它在第一节显示了奇怪的标题。虽然有时会发生,但我不知道是什么触发了它。自动调整大小模式设置为与内容成比例 以下是iphone、情节提要和自动布局约束的快照

故事板

自动布局约束

我扩展了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)
        }
    }
}

看起来它是关于SegmentedControl的“对象ID”(图像上的蓝色箭头)的。 验证是否在Interface Builder中的子类中正确设置了“Class”属性(图中的红色箭头)

使用默认类检查问题是否继续发生。 如果它解决了问题,那么错误应该在您的子类代码中。 如果不是,那就更奇怪了


看起来像是分段控件的“对象ID”(图像上的蓝色箭头)的问题。 验证是否在Interface Builder中的子类中正确设置了“Class”属性(图中的红色箭头)

使用默认类检查问题是否继续发生。 如果它解决了问题,那么错误应该在您的子类代码中。 如果不是,那就更奇怪了



在幕后,Xcode为故事板构建可本地化的.strings文件,该文件使用对象ID将视图对象的字符串映射到条目。您显示的内容看起来像其中一个字符串的字符串名称。如果编辑故事板的.strings文件并更改其中一个字符串映射(如
“KkS-S7-SCw.segmentTitle”=“All”
),则可能会得到您看到的结果。我的猜测是,故事板表面下的可本地化字符串有些混乱。

在幕后,Xcode为您的故事板构建localizable.strings文件,该文件使用对象ID将视图对象的字符串映射到条目。您显示的内容看起来像其中一个字符串的字符串名称。如果编辑故事板的.strings文件并更改其中一个字符串映射(如
“KkS-S7-SCw.segmentTitle”=“All”
),则可能会得到您看到的结果。我的猜测是在某种程度上搞乱了故事板表面下的可本地化字符串。

显示与CustomSegmentedControls关联的视图控制器代码这看起来像本地化中的一个键。你的故事板本地化了吗?您在发生这种情况的设备上设置了不同的语言/区域吗?@Krunal我已经更新了我的代码。@Losiowaty情节提要没有本地化,先生。设备语言设置为英语sir。替换
@IBOutlet弱var段控制:UISegmentedControl
@ibvar segmentControl:CustomSegmentedControl显示与CustomSegmentedControls关联的视图控制器代码这看起来像本地化中的一个键。你的故事板本地化了吗?您在发生这种情况的设备上设置了不同的语言/区域吗?@Krunal我已经更新了我的代码。@Losiowaty情节提要没有本地化,先生。设备语言设置为英语sir。替换
@IBOutlet弱var段控制:UISegmentedControl
@ibvar segmentControl:CustomSegmentedControl那个奇怪的标题确实是对象id。我刚检查过。但是课程安排得很好。正如@Krunal在评论中指出的,我在viewcontroller中给出了错误的IBOutlet类。这可能就是它让我明白的原因。我现在无法核实。因为这种情况很少发生。在提出这个问题的过程中,我运行了这个项目,它工作得很好,有可能是一个与XCode本身和构建过程有关的问题。。。有时清理项目(shift+command+K)和构建文件夹(option+shift+command+K)可以解决运行时出现的一些奇怪且无法解释的问题。该版本被上传到diawi.com,同一版本在该手机上安装了两次。第一次它像预期的那样工作,第二次它给出了对象ID标题那个奇怪的标题确实是对象ID。我刚刚检查过。但是课程安排得很好。正如@Krunal在评论中指出的,我在viewcontroller中给出了错误的IBOutlet类。这可能就是它让我明白的原因。我现在无法核实。因为这种情况很少发生。在提出这个问题的过程中,我运行了这个项目,它工作得很好,有可能是一个与XCode本身和构建过程有关的问题。。。有时清理项目(shift+command+K)和构建文件夹(option+shift+command+K)可以解决运行时出现的一些奇怪且无法解释的问题。该版本被上传到diawi.com,同一版本在该手机上安装了两次。第一次按预期工作,第二次为对象ID titlethanks提供信息。让我玩一下琴弦,然后给你回电话。我检查了琴弦,试着修改了琴弦,看起来还不错。当我第一次打开它时,它看起来像是感谢您提供的信息。让我玩一下琴弦,然后给你回电话。我检查了琴弦,试着修改了琴弦,看起来还不错。当我第一次打开它时,它看起来像
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()
            }
        }
    }
}