【问题标题】:Click on the already selected segment control swift点击已经选中的段控制 swift
【发布时间】:2019-03-09 01:55:38
【问题描述】:

我有一个 UISegmentedControl 有 4 个段。当它被选中时,它应该弹出视图。当弹出窗口消失,并尝试点击相同的段索引时,它应该再次显示弹出窗口。通过使用following在弹出关闭后点击相同的段索引没有任何动作。

segHeader.addTarget(self, action: Selector("valuechange:"), forControlEvents: .AllEvents)

segHeader.addTarget(self, action: Selector("valuechange:"), forControlEvents: .ValueChanged)

【问题讨论】:

  • 只有一次(当值改变时)触发,第二次点击它不触发

标签: ios swift uisegmentedcontrol


【解决方案1】:

经过大量研究我能够解决它。

我在这里写答案,希望将来对其他人有所帮助。

当段控制被按下时,写下面的代码。

@IBAction func segHeaderPressed(sender: UISegmentedControl) {

如果 segHeader.selectedSegmentIndex == 0{

让 sortedViews = sender.subviews.sort( { $0.frame.origin.x

        for (index, view) in sortedViews.enumerate() {
            if index == sender.selectedSegmentIndex {
                view.backgroundColor = iOSBlueColor // UIColor.blueColor()
            } else {
                view.backgroundColor = UIColor.clearColor()
            }
        }

selectedInd = -1

//你的代码... }else if(segHeader.selectedSegmentIndex == 1){

        let sortedViews = sender.subviews.sort( { $0.frame.origin.x < $1.frame.origin.x } )

        for (index, view) in sortedViews.enumerate() {
            if index == sender.selectedSegmentIndex {
                view.backgroundColor = iOSBlueColor //UIColor.blueColor()
            } else {
                view.backgroundColor = UIColor.clearColor()
            }
        }

// 你的代码... }else if(segHeader.selectedSegmentIndex == 2){

让 sortedViews = sender.subviews.sort( { $0.frame.origin.x

        for (index, view) in sortedViews.enumerate() {
            if index == sender.selectedSegmentIndex {
                view.backgroundColor = iOSBlueColor //UIColor.blueColor()
            } else {
                view.backgroundColor = UIColor.clearColor()
            }
        }

}else if(segHeader.selectedSegmentIndex == 3){

让 sortedViews = sender.subviews.sort( { $0.frame.origin.x

        for (index, view) in sortedViews.enumerate() {
            if index == sender.selectedSegmentIndex {
                view.backgroundColor = iOSBlueColor //UIColor.blueColor()
            } else {
                view.backgroundColor = UIColor.clearColor()
            }
        }

} }

基本上分段控制功能一旦被选中,如果你再次点击它就不会响应。所以我只是改变选定段的背景颜色。希望它可以帮助某人。

【讨论】:

    【解决方案2】:

    子类UISegmentedControl 并覆盖touchesEnded

    class DemoSegmentedControl: UISegmentedControl {
        override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                self.sendActionsForControlEvents(UIControlEvents.ValueChanged);
                super.touchesEnded(touches, withEvent: event);
        }
    }
    

    这有一个错误,当触摸不同的段时,它会触发你对UIControlEvents.ValueChanged 的两次操作,但是当多次触摸同一段时,它会按预期运行。如果两次触发操作对您来说太昂贵,您可以尝试使用时间戳“过滤”事件。

    【讨论】:

    • 对不起,我是 ios 的新手,也是 swift 的新手,你能告诉我我应该将我的段控制链接到这个类吗?我应该如何在段控制点击上调用方法
    • 从您的 xib 或情节提要中选择段控制,然后从左侧窗格中打开身份检查器,查看“自定义类”字段并输入自定义类的名称,上面将是 DemoSegmentedControl
    【解决方案3】:

    如果我理解正确,您想在选择分段控件时弹出/显示视图吗?

    SWIFT 3

    在那种情况下,你把事情复杂化了,使用起来会容易得多:

    viewName.isHidden = 假/真

    这样,您可以根据应用于分段控件索引的操作隐藏或显示视图。例如:

    @IBAction func segmentedAction(_ sender: AnyObject) {

        if segmentedControl.selectedSegmentIndex == 0 {
    
            viewName.isHidden = false
    
        }
        else {
    
            viewName.isHidden = true
        }
    }
    

    【讨论】:

    • 抱歉理解错了,顺便找到答案,我会更新的。
    【解决方案4】:

    我改进了特斯拉的answers一点点。

    如果您发送.touchUpInside 事件并绑定它而不是.valueChanged,则它在每种情况下仅触发一次。

    此外,您应该在touchesEnded 之后调用sendActions 函数。 如果没有,segmentedControl.selectedSegmentIndex 将返回旧值。

    class ClickableSegmentedControl: UISegmentedControl {
      override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event);
        self.sendActions(for: UIControl.Event.touchUpInside);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多