Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
#1

Кнопка и BackgroundImage - Objective-C

20.04.2012, 21:02. Просмотров 2160. Ответов 11
Метки нет (Все метки)

Добрый вечер! Такой вопрос. Есть кнопка. Нужно, чтоб в не нажатом состоянии у неё был один BackgroundImage ,при нажатии другой , а при отпускании третий. Для первого состояния выбрал UIControlStateNormal , для третьего состояния UIControlStateHighlighted , а второе состояние не получается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 21:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кнопка и BackgroundImage (Objective-C):

Кнопка из картинки - Objective-C
Перелопатив кучу информации я пришел к выводу что конкретного "официального" метода сделать из картинки кликабельную кнопку нет. Максимум,...

Стандартная кнопка - Программирование iOS
Здраствуйте, скажите пожалуйста, как можно повернуть стандартную кнопку UIButton ?)Заранее спасибо)

Запомнить была ли нажата кнопка - Objective-C
Всем привет! Есть кнопка UIButton, отвечающая за выставление "Лайков" к посту. Для изменения цвета кнопки после нажатия использую следующий...

Кнопка HOME в симуляторе iPhone Xcode 6.1 - Программирование iOS
Здравствуйте. После обновления Xcode до версии 6.1 обнаружил, что в симуляторе iPhone пропала кнопка Home. Каким образом можно...

Как узнать, кнопка с какой цифрой была нажата? (калькулятор) - Objective-C
начал писать калькулятор. в файле .xib прикрепил к вьюшке кнопки, связал их с нужными функциями, а кнопки с цифрами привязал к одной...

BackgroundImage - C#
Для фона окна я использую BackgroundImage, также в приложении используется графика по таймеру. Но дело в том, что если не использовать фон,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.04.2012, 22:17 #2
UIControlStateHighlighted - Как раз и символизирует состояние "нажатое".
При "отпускании", либо "touch up", либо при трэкинге из него выходит.
Используйте UIControlStateSelected. И выставляйте button.selected = YES, когда необходимо.

PS:
"Control State" section
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
21.04.2012, 14:23  [ТС] #3
Всё ок. 3 положения работают. Но если в коде пишу button.selected = YES, а потом нажимаю на эту кнопку, то моя картинка не появляется, а кнопка закрашивается коричневым, почему так может быть?
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.04.2012, 17:07 #4
Отвечу так же как вопрос задали, и сколько сведений предоставили для понимания сути проблемы:
Да без понятия.
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
21.04.2012, 18:32  [ТС] #5
Всё очень просто - когда нажимаю на нажатую кнопку, исчезают все картинки. Видимо есть еще 4-е положение - "нажатие нажатой кнопки", для него нужна 4-ая картинка?
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.04.2012, 18:36 #6
А доку почитать - не?
Objective-C
1
2
3
4
5
6
7
8
enum {
    UIControlStateNormal               = 0,
    UIControlStateHighlighted          = 1 << 0,
    UIControlStateDisabled             = 1 << 1,
    UIControlStateSelected             = 1 << 2,
    UIControlStateApplication          = 0x00FF0000,
    UIControlStateReserved             = 0xFF000000
};
Все, что там есть. 3 состояния реально используются. Disabled я думаю Вы не используете. Ну значит написали чтото не так. Код в студию.
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
21.04.2012, 18:55  [ТС] #7
В том то и дело, что читал. Не понимаю, в чем тут могут быть трудности , выкладываю код
Objective-C
1
2
3
4
5
6
7
8
    UIImage* hour_image = [UIImage imageNamed:@"final_hour_button.png"];
    UIImage* hour_image_clicked = [UIImage imageNamed:@"final_hour_button_clicked .png"];
    UIImage* hour_image_pressed = [UIImage imageNamed:@"final_hour_button_pressed.png"];
    UIButton *button_hour = [[UIButton alloc] initWithFrame:CGRectMake(0,button_left_up.frame.size.width,hour_image.size.width,hour_image.size.height)];
    button_hour.selected = YES;
    [button_hour setBackgroundImage:hour_image forState:UIControlStateNormal]; 
    [button_hour setBackgroundImage:hour_image_clicked forState:UIControlStateHighlighted]; 
    [button_hour setBackgroundImage:hour_image_pressed forState:UIControlStateSelected];
Вроде должно всё работать, но когда нажимаю на кнопку, она становится черной.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.04.2012, 19:24 #8
Цитата Сообщение от andrei0077 Посмотреть сообщение
[UIImage imageNamed:@"final_hour_button_clicked .png"];
Это кнопка становится черной или вы лишний пробел в имя файла сунули, и у вас image == nil. соответственно backgroundImage у кнопки nil, и она прозрачная?
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
21.04.2012, 19:50  [ТС] #9
Пробела лишнего нет, все 3 картинки рабочие, потому если убрать selected = YES, то при нажатии появляется картинка, но стоит поставить selected = YES, то при нажатии кнопка становится черной. Вообще не понимаю, в чем дело.

Добавлено через 20 минут
Получается, что когда нажимаешь на нажатую кнопку, то она становится черной, даже если есть картинка UIControlStateHighlighted . Как этого избежать? Можно сделать так, чтоб нажатая кнопка вообще не реагировала на мышь?
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.04.2012, 19:55 #10
выставьте кнопке backgroundColor = [UIColor redColor];
и нажмите на неё. Будет красная - нету у вас картинки в состоянии Highlighted.
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
21.04.2012, 20:02  [ТС] #11
Вставил - она не стала красной. Попробуйте у себя создать кнопку, указать selected = YES и при нажатии она будет черной, независимо от картинок.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.04.2012, 20:59 #12
Ваше решение:
Objective-C
1
2
UIImage* hour_image_pressed_highlighted = [UIImage imageNamed:@"final_hour_button_pressed.png"];
[button_hour setBackgroundImage:hour_image_pressed_highlighted forState:UIControlStateSelected | UIControlStateHighlighted];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 20:59
Привет! Вот еще темы с ответами:

style.backgroundImage - JavaScript
В CSS файле у меня описано так: #image { width: 612px; height: 612px; background-image: url(../img/1.jpg); } В JS пишу так: ...

Bootstrap backgroundimage - HTML, CSS
Ребята не подскажете как поставить фоновое изображение на Bootstrap? пишу в body ни чего не отображает

Очистка BackgroundImage в TabControl - Visual Basic .NET
Как программно очистить фоновый рисунок?

.NET 4.x Анимированный фон в BackgroundImage - C#
Добрый вечер господа. Можно ли сделать, подгрузить анимированный фон в элемент управления BackgroundImage? Любая анимация...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.04.2012, 20:59
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru