UISegmentedControl не запускается с iOS 5 - PullRequest
1 голос
/ 15 октября 2011

Кто-нибудь еще видит эту проблему? Я использую сегментированный элемент управления и переопределил его, чтобы при выборе пользователем того же сегмента (индекса) он не выбирался.

В предыдущих версиях это работало нормально, но сейчас тестируется на iOS5. И я обнаружил, что UIControlEventValueChanged не отправляется, когда вы нажимаете на тот же сегмент. Поэтому код работает нормально, когда вы нажимаете на разные сегменты, но не для одного и того же сегмента.

Мой код.

segmentCtrl = [[MySegmentedControl alloc] initWithItems: segmentCtrlLabels];
segmentCtrl.segmentedControlStyle = UISegmentedControlStyleBar;
// Register for touch events
[segmentCtrl addTarget:self action:@selector(segmentedCtrlTouched:) forControlEvents:UIControlEventValueChanged];

Я попытался зарегистрироваться для UIControlEventTouchUpInside и получить то же поведение.

Есть предложения по обходу?

С уважением, Йеньи

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Исправлено путем регистрации для сенсорного события. Если затронутый сегмент совпадает, я вручную отправляю событие EventChanged.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{    
NSInteger current = self.selectedSegmentIndex;
[super touchesBegan:touches withEvent:event];

if (current == self.selectedSegmentIndex) {
    [self setSelectedSegmentIndex:current];
    [self sendActionsForControlEvents:UIControlEventValueChanged];
}
}
0 голосов
/ 30 января 2013

Да, вам нужно реализовать управляющие события самостоятельно.

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
    [super touchesBegan: touches withEvent: event];

    [self sendActionsForControlEvents: UIControlEventTouchDown];
}

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event
{
    [super touchesEnded: touches withEvent: event)];

    if (CGRectContainsPoint(self.bounds, [touches.anyObject locationInView: self]))
    {
        [self sendActionsForControlEvents: UIControlEventTouchUpInside];
    }
    else
    {
        [self sendActionsForControlEvents: UIControlEventTouchUpOutside];
    }
}

- (void) touchesCancelled: (NSSet *) touches withEvent: (UIEvent *) event
{
    [super touchesCancelled: touches withEvent: event];

    [self sendActionsForControlEvents: UIControlEventTouchCancel];
}
...