2013-10-06 2 views
3

Мне нужно сохранить UIButton, выделенный после события касания. В версиях IOS < 7 Я использовал следующие действия для события Touch Up Inside:Сохранить UIButton выделено после touch & iOS 7

- (IBAction)clickMe:(id)sender { 
    UIButton *button = sender; 
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ button.highlighted = YES; }]; 
} 

К сожалению, что-то изменилось в прошивке 7 и этот код больше не работает: если нажать на кнопку, кнопка возвращается к нормальное состояние; интересно, если я удерживаю кнопку нажатой немного дольше, кнопка остается подсвеченной. Обратите внимание, что приложение было разработано для iOS 6, поэтому оно работает в iOS 7 в режиме совместимости. Я пытаюсь найти способ сделать приложение правильно работать как на iOS 6 & 7, но до сих пор я не нашел приятного решения (одним из способов обхода очереди является событие, которое выделяет кнопку после короткой задержки, но вызывает раздражающее мерцание кнопки). Любой совет?

ответ

4

As for the ".highlighted" property you're using, Apple documentation states: «UIControl автоматически устанавливает и очищает это состояние автоматически, когда прикосновение входит и выходит во время отслеживания и когда происходит касание».

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

+0

Государственная собственность является неизменяемым. – Wolfy

+0

Ты прав @ Вольф. Позвольте мне подумать о немного переформулированном ответе. –

+1

Майкл, да, я знаю, как работает свойство «.highlighted», но спасибо, что указали это. Очередь в операции, например, я использовал, чтобы переопределить поведение по умолчанию, потому что операция произойдет после того, как событие Touch Up сбросит '.highlighted' обратно в NO. Это был трюк, но это было просто и эффективно. К сожалению, iOS 7, по-видимому, изменил порядок операций. Конечно, подклассификация класса 'UIButton' решила бы проблему, но я искал простое решение. Кроме того, я не использую изображения, просто текст заголовка. – Wolfy

0

Это может быть немного поздно, чтобы помочь вам, но то, что я, наконец, закончил делать, чтобы обойти эту проблему, заключается в том, чтобы установить цвет фона слоя в серый цвет для установки кнопки выделенной. И затем, когда я устанавливаю состояние подсветки на false, я устанавливаю цвет фона обратно на белый. Чтобы это сработало, вы должны использовать настраиваемую кнопку, а не закругленную прямоугольную кнопку.

1

попробовать это:

[UIView animateWithDuration:1 
        animations:^{ 
        } 
        completion:^(BOOL finished) { 
         button.highlighted = true; 
         button.selected = true; 
        } 
]; 
Смежные вопросы