Обнаружение события при нажатии на уже выбранный сегмент
Привет, я хочу получить событие, когда я касаюсь уже выбранного сегмента.
я реализовал решение ниже
import UIKit
class MARSSegmentController: UISegmentedControl {
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}
*/
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
let oldValue:NSInteger = self.selectedSegmentIndex
super.touchesBegan(touches, withEvent: event)
if oldValue == self.selectedSegmentIndex{
sendActionsForControlEvents(UIControlEvents.ValueChanged)
}
}
}
это работает нормально, но событие ValueChanged выполняется дважды, если я касаюсь не выбранного сегмента.
Реализация жеста крана не работает. означает, что когда я нажимаю на невыбранный сегмент, он показывает старый выбранный сегмент, когда используется жест касания.
Если какое-либо решение, пожалуйста, предложите.
3 ответа
Я понимаю, что это старый вопрос, но я столкнулся с той же проблемой, где мне нужно было определить, был ли выбран существующий сегмент, а также изменился ли выбранный сегмент.
Решение выше было близко, но вот что сработало для меня. Захватите существующий, выбранный индекс сегмента на touchesBegan, а затем в touchesEnded сравните старое значение с текущим выбранным индексом сегмента. Если они совпадают, я вручную запускаю событие.ValueChanged. Примечание: это синтаксис Swift 2.0.
class SegmentedControlExistingSegmentTapped : UISegmentedControl
{
// captures existing selected segment on touchesBegan
var oldValue : Int!
override func touchesBegan( touches: Set<UITouch>, withEvent event: UIEvent? )
{
self.oldValue = self.selectedSegmentIndex
super.touchesBegan( touches , withEvent: event )
}
// This was the key to make it work as expected
override func touchesEnded( touches: Set<UITouch>, withEvent event: UIEvent? )
{
super.touchesEnded( touches , withEvent: event )
if self.oldValue == self.selectedSegmentIndex
{
sendActionsForControlEvents( .ValueChanged )
}
}
}
Только положилself.nameSegmentedControl.isMomentary = true
Когда ваш метод связан с valueChanges, обнаруживается касание.
Я думаю, что ваша проблема заключается в том, что if oldValue == self.selectedSegmentIndex
всегда будет возвращать истину из-за let oldValue:NSInteger = self.selectedSegmentIndex
, Так что все, что вам нужно, это изменить ваше условие if if oldValue == selectedValue
где selectedValue - это значение, с которым вы считаете выбранный сегмент