点击已经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但是当多次触摸同一个分段时,它将按预期行事。 如果触发两次操作对您来说太贵,您可以尝试使用时间戳“过滤”事件。