2015-12-29 1 views
1

У меня есть UISegmentedControl с 4 сегментами. Когда он выбран, он должен всплывать. И когда всплывающее окно отклоняется и пытается щелкнуть по тому же индексу сегмента, он должен снова показать всплывающее окно. При использовании следующих действий не происходит никаких действий при нажатии на один и тот же индекс сегмента после всплытия.Нажмите на уже выбранный сегментный контроль swift

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

или

segHeader.addTarget(self, action: Selector("valuechange:"), forControlEvents: .ValueChanged) 
+0

только один раз (когда значение меняется) его срабатывание, во второй раз нажмите его не стрелять –

ответ

2

После много исследований я в состоянии решить.

Письмо ответ здесь может быть полезным другим в будущем.

При нажатии кнопки управления сегментом введите код ниже.

@IBAction FUNC segHeaderPressed (отправитель: 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

// код ... } еще если (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() 
      } 
     } 

// код ... } еще если (segHeader.selectedSegmentIndex == 2) {

пусть sortedViews = sender.subviews.sort ({$ 0. frame.origin.x < $ 1.frame.origin.х})

 for (index, view) in sortedViews.enumerate() { 
      if index == sender.selectedSegmentIndex { 
       view.backgroundColor = iOSBlueColor //UIColor.blueColor() 
      } else { 
       view.backgroundColor = UIColor.clearColor() 
      } 
     } 

} иначе, если (segHeader.selectedSegmentIndex == 3) {

пусть sortedViews = sender.subviews.sort ({$ 0.frame.origin.x < $ 1.frame.origin. х})

 for (index, view) in sortedViews.enumerate() { 
      if index == sender.selectedSegmentIndex { 
       view.backgroundColor = iOSBlueColor //UIColor.blueColor() 
      } else { 
       view.backgroundColor = UIColor.clearColor() 
      } 
     } 

}}

в основном сегментирован функциональность Controll является, когда он выбран, если нажать еще раз то же самое, что не будет отвечать. поэтому просто меняю цвета фона для выбранного сегмента. надеюсь, что это помогает кому-то.

0

Подкласс 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, но при прикосновении же сегмента мультипликатор время будет вести себя так, как ожидалось. Вы можете попробовать «фильтровать» события с помощью метки времени, если триггерное действие дважды для вас слишком дорого.

+0

извините, новичок в ios, а также быстро, можете ли вы сказать мне, что я должен связать свой контроль сегмента с этим классом и как должен вызовите метод управления сегментом, нажмите –

+0

, выберите элемент управления сегментами из вашего xib или раскадровки, затем откройте «Идентификационный инспектор» с левой панели, см. поле «Пользовательский класс» и введите имя пользовательского класса, для выше будет DemoSegmentedControl – azimov

1

Если я правильно понял, что вы хотите поп/показать представление, когда отрегулирован сегментированный элемент управления?

СВИФТ 3

В этом случае, вы усложнять вещи, гораздо проще в использовании:

viewName.isHidden = ложь/правда

Таким образом, вы можете скрыть или показать вид/на основе действия, применяемого к сегментированному индексу управления. Например:

@IBAction Func segmentedAction (_ отправитель: AnyObject) {

if segmentedControl.selectedSegmentIndex == 0 { 

     viewName.isHidden = false 

    } 
    else { 

     viewName.isHidden = true 
    } 
} 
+0

Извините, кстати, нашел ответ для этого, я буду обновлять. –