Ios 单击已选择的管段控制按钮

Ios 单击已选择的管段控制按钮,ios,swift,uisegmentedcontrol,Ios,Swift,Uisegmentedcontrol,我有一个带有4个段的UISegmentedControl。选择后,应弹出视图。当弹出窗口消失,并试图点击相同的段索引时,它应该再次显示弹出窗口。通过使用以下命令,在弹出窗口后单击同一段索引时不会执行任何操作 segHeader.addTarget(self, action: Selector("valuechange:"), forControlEvents: .AllEvents) 或 子类UISegmentedControl和覆盖touchesEnded class DemoSegment

我有一个带有4个段的
UISegmentedControl
。选择后,应弹出视图。当弹出窗口消失,并试图点击相同的段索引时,它应该再次显示弹出窗口。通过使用以下命令,在弹出窗口后单击同一段索引时不会执行任何操作

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


子类
UISegmentedControl
和覆盖
touchesEnded

class DemoSegmentedControl: UISegmentedControl {
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
            self.sendActionsForControlEvents(UIControlEvents.ValueChanged);
            super.touchesEnded(touches, withEvent: event);
    }
}
类DemoSegmentedControl:UISegmentedControl{
覆盖func touchesEnded(触摸:设置,withEvent事件:UIEvent?){
self.sendActionsForControlEvents(UIControlEvents.ValueChanged);
super.touchesend(touchs,with event:event);
}
}

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

子类
UISegmentedControl
和覆盖
touchesend

class DemoSegmentedControl: UISegmentedControl {
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
            self.sendActionsForControlEvents(UIControlEvents.ValueChanged);
            super.touchesEnded(touches, withEvent: event);
    }
}
类DemoSegmentedControl:UISegmentedControl{
覆盖func touchesEnded(触摸:设置,withEvent事件:UIEvent?){
self.sendActionsForControlEvents(UIControlEvents.ValueChanged);
super.touchesend(touchs,with event:event);
}
}

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

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

斯威夫特3

在这种情况下,您将事情过度复杂化,使用起来更容易:

viewName.ishiden=false/true

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

@iAction func segmentedAction(\发送方:AnyObject){


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

斯威夫特3

在这种情况下,您将事情过度复杂化,使用起来更容易:

viewName.ishiden=false/true

通过这种方式,您可以根据应用于分段控制索引的操作隐藏或显示视图。例如:

@iAction func segmentedAction(\发送方:AnyObject){


经过大量的研究,我终于解决了这个问题

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

按下段控制器时,写入以下代码

@iAction func segHeaderPressed(发送方:UISegmentedControl){

如果segHeader.selectedSegmentIndex==0{

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

selectedId=-1

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

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

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

} }


基本上,分段控制功能一旦被选中,如果你再次点击,它将不会响应。因此,我只是更改所选分段的背景颜色。希望它能帮助别人。

经过大量研究,我能够解决这个问题

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

按下段控制器时,写入以下代码

@iAction func segHeaderPressed(发送方:UISegmentedControl){

如果segHeader.selectedSegmentIndex==0{

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

selectedId=-1

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

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

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

} }

基本上,分段控制功能一旦被选中,如果你再次点击相同的按钮,它将不会响应。因此,我只是更改所选分段的背景颜色。希望它能帮助别人。

我改进了特斯拉的一点

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

此外,您应该在
touchesend
之后调用
sendActions
函数。 否则,
segmentedControl.selectedSegmentIndex
将返回旧值

class ClickableSegmentedControl:UISegmentedControl{
覆盖函数touchesend(touchs:Set,带有事件:UIEvent?){
super.touchesend(touchs,with:event);
self.sendActions(用于:UIControl.Event.touchUpInside);
}
}
我改进了特斯拉的一点

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

此外,您应该在
touchesend
之后调用
sendActions
函数。 否则,
segmentedControl.selectedSegmentIndex
将返回旧值

class ClickableSegmentedControl:UISegmentedControl{
覆盖函数touchesend(touchs:Set,带有事件:UIEvent?){
super.touchesend(touchs,with:event);
self.sendActions(用于:UIControl.Event.touchUpInside);
}
}

只有一次(当值改变时)触发,第二次单击不触发只有一次(当值改变时)它触发,第二次点击它不触发对不起,我对ios和swift都是新手,你能告诉我我应该把我的段控制链接到这个类上,我应该如何调用段控制上的方法吗?点击从你的xib或故事板中选择段控制,然后从左窗格打开Identity inspector,查看“自定义类”字段并键入名称of自定义类,用于上述wil
    if segmentedControl.selectedSegmentIndex == 0 {

        viewName.isHidden = false

    }
    else {

        viewName.isHidden = true
    }
}
        for (index, view) in sortedViews.enumerate() {
            if index == sender.selectedSegmentIndex {
                view.backgroundColor = iOSBlueColor // UIColor.blueColor()
            } else {
                view.backgroundColor = UIColor.clearColor()
            }
        }
        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()
            }
        }
        for (index, view) in sortedViews.enumerate() {
            if index == sender.selectedSegmentIndex {
                view.backgroundColor = iOSBlueColor //UIColor.blueColor()
            } else {
                view.backgroundColor = UIColor.clearColor()
            }
        }
        for (index, view) in sortedViews.enumerate() {
            if index == sender.selectedSegmentIndex {
                view.backgroundColor = iOSBlueColor //UIColor.blueColor()
            } else {
                view.backgroundColor = UIColor.clearColor()
            }
        }