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