При одновременном нажатии двух кнопок этот метод вызывает сбой: - (void) buttonPressed: (UIButton *) button ЧТО НЕПРАВИЛЬНО? - PullRequest
3 голосов
/ 20 июля 2011

У меня есть 1 метод для двух кнопок в моем интерфейсе, для подправки внутри.

-(void)buttonPressed:(UIButton *)button{
    [yButton setEnabled:NO];
    [iButton setEnabled:NO];
    pismeno = (button.tag == BUTTON_TAG_Y) ? PismenoYpsilon : PismenoJota;
    [self setNewValues];
}

Все работает, если я не нажимаю ОБА кнопки одновременно. Я пытаюсь отключить их обоих после подкраски здесь:

[yButton setEnabled:NO];
[iButton setEnabled:NO];

включение их в конце моего метода setNewValues. Как уже говорилось, все работает, если ОБА кнопки не нажимаются одновременно, то происходит сбой.

Как я могу устранить это? Большое спасибо:)

Ответы [ 5 ]

13 голосов
/ 26 июля 2012

Мартин, вы можете установить для свойства exclusiveTouch на кнопке UIB значение YES.Тогда будет зарегистрировано только одно нажатие кнопки.

Посмотрите на эксклюзивное свойство touch класса UIView здесь: http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

Это помогает?

2 голосов
/ 20 июля 2011

Может помочь, если мы узнаем немного больше о катастрофе?

Без этого сложно правильно диагностировать, поскольку CoreUI является однопоточным, вы не должны получать два вызова в buttonPressed: одновременно, так что это не будет условием гонки.

0 голосов
/ 20 июля 2011

если у вас все еще есть проблемы, хотите быстрое решение? просто нужно включить функции 1 для каждой кнопки, а затем установить setEnabled, к которой всегда относится и эта функция.

0 голосов
/ 20 июля 2011

Я не знаю, почему ваше приложение дает сбой, но я обычно использую переменную с именем allowInput или аналогичной.

-(void)buttonPressed:(UIButton *)button{
    if( allowInput == YES ) {
        allowInput == NO;
        [yButton setEnabled:NO];
        [iButton setEnabled:NO];
        pismeno = (button.tag == BUTTON_TAG_Y) ? PismenoYpsilon : PismenoJota;
        [self setNewValues];
    }
}

Это всегда предотвращало быстрое нажатие кнопок, вызывающее проблемы для моего кода.

В конце setValues ​​установите для параметра allowInput значение YES.

Возможно, это поможет вам сузить причину, если при использовании отладчика ее не найдено.

0 голосов
/ 20 июля 2011

Похоже на какое-то состояние гонки

Поскольку нажатая кнопка передается в качестве аргумента, вам, вероятно, следует сначала обработать ее, а затем другую кнопку;может также поставить @synchronized вокруг них для хорошей меры - хотя это всего лишь предположение.

...