2016-08-25 3 views
2

У меня есть сегментированный элемент управления, который имеет 4 сегмента, как на картинке.Как создать и выделить красную линию волос (вниз), когда какой-либо сегментированный выбран в сегментированном управлении в Swift

Foe например: Проводная, Managed Mobility

enter image description here

Я хотел бы получить красный цвет в нижней части (волосяной покров), когда выбран какой-либо сегмент; в основном он должен показать красную линию в выбранном сегменте

мой текущий код выглядит следующим образом

func changeColor(sender: UISegmentedControl){ 

    if sender.selectedSegmentIndex == 0 { 
     UIView.animateWithDuration(0.5, animations: { 
      self.containerAccountSummary.alpha = 1 
      self.containerLocationTracker.alpha = 0 
      self.containerWireline.alpha = 0 
      self.containerManagedMobility.alpha = 0 
      self.containerMobileVoiceAndData.alpha = 0 
     }) 
    } else if sender.selectedSegmentIndex == 1{ 
     UIView.animateWithDuration(0.5, animations: { 
      self.containerAccountSummary.alpha = 0 
      self.containerLocationTracker.alpha = 1 
      self.containerWireline.alpha = 0 
      self.containerManagedMobility.alpha = 0 
      self.containerMobileVoiceAndData.alpha = 0 
     }) 
    }else if sender.selectedSegmentIndex == 2{ 
     UIView.animateWithDuration(0.5, animations: { 
      self.containerAccountSummary.alpha = 0 
      self.containerLocationTracker.alpha = 0 
      self.containerWireline.alpha = 1 
      self.containerManagedMobility.alpha = 0 
      self.containerMobileVoiceAndData.alpha = 0 
     }) 

    }else if sender.selectedSegmentIndex == 3{ 
     UIView.animateWithDuration(0.5, animations: { 
      self.containerAccountSummary.alpha = 0 
      self.containerLocationTracker.alpha = 0 
      self.containerWireline.alpha = 0 
      self.containerManagedMobility.alpha = 1 
      self.containerMobileVoiceAndData.alpha = 0 
     }) 

    }else { 
     UIView.animateWithDuration(0.5, animations: { 
      self.containerAccountSummary.alpha = 0 
      self.containerLocationTracker.alpha = 0 
      self.containerWireline.alpha = 0 
      self.containerManagedMobility.alpha = 0 
      self.containerMobileVoiceAndData.alpha = 1 
     }) 
    } 
} 

любые советы?

ответ

0

Вы можете взять UIView для волосяного покрова и поместить его ниже в сегментный контроль на вашем раскадровке. Указывается цвет и высота. Дайте его ширину, равную сегменту sigle в вашем сегменте, а затем, когда действие управления сегментом вызывается, возьмите выбранный индекс сегмента и в соответствии с этим индексом измените кадр UIView, предоставив X-позицию, Y-позицию, высоту и ширину. Затем установите этот кадр на линию волос и назовите метод layoutIfNeeded() на линии волос. Это изменит структуру волоса. Напишите функцию ниже и вызовите эту функцию в методе действия вашего сегмента управления:

override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 
     let segmentControlFrame = self.view.convert(segmentControl.frame, from: segmentControl.superview) 
     let widthForHairLine = segmentControlFrame.width/4 
     if segmentControl.selectedSegmentIndex == 0 { 
      firstFrame = CGRect(x: segmentControlFrame.minX, y: segmentControlFrame.maxY , width: widthForHairLine, height: 5) 
     } else if segmentControl.selectedSegmentIndex == 1 { 
      firstFrame = CGRect(x: (segmentControlFrame.minX + widthForLine), y: segmentControlFrame.maxY , width: widthForHairLine, height: 5) 
     } else if segmentControl.selectedSegmentIndex == 2 { 
      firstFrame = CGRect(x: (segmentControlFrame.minX + widthForLine + widthForLine), y: segmentControlFrame.maxY , width: widthForHairLine, height: 5) 
     } else if segmentControl.selectedSegmentIndex == 3 { 
      firstFrame = CGRect(x: (segmentControlFrame.minX + widthForLine + widthForLine + widthForLine), y: segmentControlFrame.maxY , width: widthForHairLine, height: 5) 
     self.hairline.backgroundColor = UIColor.red 
     self.hairline.frame = firstFrame! 
     self.hairline.layoutIfNeeded() 
    }