点击已经select的段控制swift
我有一个UISegmentedControl
4段。 当它被选中时,它应该popup视图。 当popup窗口解散,并试图点击相同的段索引,它应该再次显示popup。 通过使用下面的popup式消息后,对同一段索引的点击没有任何操作。
segHeader.addTarget(self, action: Selector("valuechange:"), forControlEvents: .AllEvents)
要么
segHeader.addTarget(self, action: Selector("valuechange:"), forControlEvents: .ValueChanged)
大量的研究能够解决这个问题。
在这里写答案可能会对未来的其他人有所帮助。
当段控制按下时写下面的代码。
@IBAction func segHeaderPressed(sender:UISegmentedControl){
如果segHeader.selectedSegmentIndex == 0 {
让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() } }
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 <$ 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 == 3){
让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() } }
}}
基本上分段的控制function一旦被选中,如果再次点击也不会响应。 所以我只是改变选定的段的背景颜色。 希望它可以帮助别人。
如果我理解正确,你想要popup/显示一个视图时,select一个分段的控制权?
SWIFT 3
在这种情况下,你是过于复杂的东西,更容易使用:
viewName.isHidden = false / true
这样,您可以隐藏或显示基于应用于分段控件索引的操作的视图/视图。 例如:
@IBAction func segmentedAction(_ sender:AnyObject){
if segmentedControl.selectedSegmentIndex == 0 { viewName.isHidden = false } else { viewName.isHidden = true } }
子类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
但是当多次触摸同一个分段时,它将按预期行事。 如果触发两次操作对您来说太贵,您可以尝试使用时间戳“过滤”事件。