2013-02-27 4 views
1

У меня есть UIButtons, который использует изображения. Теперь я хочу иметь возможность установить еще одну UIImage над этой кнопкой, когда она ударит, и удалите ее, когда вы снова нажмете ее.Добавление изображения через UIButton?

Какая-то галочка для списка.

EDIT:

Мои изображения на кнопках изображения из памяти телефона. я не могу просто изменить изображение на другое, потому что изображения были загружены из памяти и ее не внешнего актива. поэтому мне нужно поместить некоторое фиксированное изображение выше всех нажатых кнопок.

  1. Следует ли добавить его как еще UIButton по сравнению с предыдущим?
  2. Должен ли я поставить его как UIImage над ним, а UIButton по-прежнему будут касаться?

Что является лучшим способом? Thnank.

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.frame = CGRectMake(column*100+10, row*100+10, 92, 92); // distnace related to scroller(not view) 
     [button setImage:thumb forState:UIControlStateNormal]; 
     [button addTarget:self 
        action:@selector(buttonClicked:) 
     forControlEvents:UIControlEventTouchUpInside]; 
+0

Или вы можете изменить изображение кнопки .. В – Mindaugas

+0

см. мое редактирование, это не так. – bilanbila

+1

Что значит «изображения из памяти телефона». Если у вас есть объект UIImage, не имеет значения, как вы создаете экземпляр, вы можете использовать его как любой другой UIImage – Mindaugas

ответ

0

Ну .. Вы можете сделать это с несколькими вариантами:
1. Добавьте UIImageView над вашей кнопкой и добавьте UITapGestureRecognizer к просмотру изображения с помощью метода, чтобы удалить его на второй мыши.
2. Вы также можете использовать backgroundColor кнопки с рисунком, который точно соответствует вашей кнопке (чтобы избежать повторов).
3. Использование слоев с CGImageRef

+0

Мой ответ - это просто пример ответа @Vinzzz – pbibergal

+0

, спасибо большое, но вижу мое редактирование. это моя вина. – bilanbila

+0

Могу ли я это сделать, но на выделенном изображении будет установлено 2 изображения: оригинальное и другое над ним? если да, то для чего синтаксис? – bilanbila

0

Вы определенно должны использовать API-интерфейсы UIButton предлагает: setImage:forState: с UIControlStateSelected (состояние кнопка должна получить, как только вы ударил его один раз)/UIControlStateNormal. Кнопка может быть highlighted или selected. Выделяется, когда вы его нажимаете (уходит, как только прикасается к стопу), в то время как для выбранного выбрано значение YES после 1-го касания и обратно на НЕТ на секунду.

+0

спасибо, но это не так. See my edit – bilanbila

0

Поскольку у вас есть пользовательская кнопка, лучшим решением является изменение изображения кнопки в зависимости от состояния установленного флажка (вы упомянули, что идея состоит в создании чего-то типа кнопки флажка).

В классе UIButton есть метод «setImage: forState:». Вы можете изменить изображение внутри кнопки, используя указанный метод. Смотреть подробнее here

Пример, как я вижу код (вы можете увидеть это по-другому):

// bool property 
@property (assign) BOOL isChecked; 
.... 
// custom button 
UIButton *theCheckboxButton = ; 
[theCheckboxButton setImage:[UIImage imageNamed:@"Unchecked"] forState:UIControlStateNormal]; 
[theCheckboxButton setImage:[UIImage imageNamed:@"Checked"] forState:UIControlStateSelected]; 
[theCheckboxButton addTarget:self action:@selector(checkBoxButtonAction:) forControlEvents: UIControlEventTouchUpInside]; 
... 
// handler 
- (void)checkBoxButtonAction:(UIButton *)aCheckBox 
{ 
    self.isChecked = !self.isChecked; 
    [aCheckBox setImage:[UIImage imageNamed:(self.isChecked ? @"Checked" : @"Unchecked")] forState:UIControlStateNormal]; 
    [theCheckboxButton setImage:[UIImage imageNamed:(self.isChecked ? @"Unchecked" : @"Checked")] forState:UIControlStateSelected]; 
} 

EDIT:

// images from not external resources 
@property (strong) UIImage *checkedImage; 
@property (strong) UIImage *uncheckedImage; 
// bool property 
@property (assign) BOOL isChecked; 
... 
// custom button 
UIButton *theCheckboxButton = ; 
[theCheckboxButton setImage:self.uncheckedImage forState:UIControlStateNormal]; 
[theCheckboxButton setImage:self.checkedImage forState:UIControlStateSelected]; 
[theCheckboxButton addTarget:self action:@selector(checkBoxButtonAction:) forControlEvents: UIControlEventTouchUpInside]; 
... 
// handler 
- (void)checkBoxButtonAction:(UIButton *)aCheckBox 
{ 
    self.isChecked = !self.isChecked; 
    [aCheckBox setImage:self.isChecked ? self.checkedImage : self.uncheckedImage] forState:UIControlStateNormal]; 
    [theCheckboxButton setImage:(self.isChecked ? self.uncheckedImage : self.checkedImage) forState:UIControlStateSelected]; 
} 
+0

Ваш обработчик не оптимален. Вам не нужно снова устанавливать изображение для выбранного состояния. Только измените состояние кнопки - выбрано | не выбран. – pbibergal

+0

Спасибо, но это не мой случай, как я уже упоминал, см. Мое редактирование по этому вопросу. – bilanbila

+0

См. Редактирующую версию для не внешних изображений. –

Смежные вопросы