Как использовать UIButton в качестве кнопки переключения?
Я пытаюсь создать кнопку переключения для каждой ячейки в моей таблице. При нажатии он изменит изображение, а при повторном нажатии снова изменит изображение - Переключить.
в UIButton
класс я не вижу selected
государство.
Я ищу способ создания кнопки переключения с помощью UIButton, чтобы я мог изменять состояние при каждом нажатии.
Вот как я это делаю в rubymotion
прямо сейчас с помощью rmq
@fav_button.on(:touch) do |sender|
puts "pressed fav button for id: " + data[:id] + " and name: " + data[:name]
#how do I change the state here?
end
5 ответов
Вы можете легко создать кнопку переключения, вам просто нужно установить соответствующие изображения для соответствующих состояний, после этого вы можете использовать selected
свойство для переключения между этими изображениями.
Я сделал чистый код цели c, чтобы показать, как вы можете это сделать, но вы также можете установить изображения в Storyboards ou Xibs, посмотрите:
// First, set the images for normal state and selected state
[button setImage:normalImage forState:UIControlStateNormal];
[button setImage:selectedImage forState:UIControlStateSelected];
// Don't forget to add an action handler to toggle the selected property
[button addTarget:self action:@selector(buttonTouch:withEvent:) forControlEvents:UIControlEventTouchUpInside];
// Now, in your button action handler, you can do something like this:
- (void)buttonTouch:(UIButton *)aButton withEvent:(UIEvent *)event
{
aButton.selected = !aButton.selected;
}
Я надеюсь это тебе поможет.
Решение Swift 4.0 (с использованием раскадровок)
Во-первых, убедитесь, что UIButton
Тип установлен в Custom
в инспекторе атрибутов.
// Reference to UIButton in Storyboard
@IBOutlet weak var toggleButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// assumes you have two images in the bundle/project
// called normal.png and selected.png.
let normalImage = UIImage(named: "normal.png")
let selectedImage = UIImage(named: "selected.png")
toggleButton.setImage(normalImage, for: .normal)
toggleButton.setImage(selectedImage, for: .selected)
}
Ниже скриншот демонстрирует ссылку на toggleButton
в раскадровке и Touch Up Inside
Событие, т. Е. Пользователь нажимает кнопку, которая срабатывает didPressButton
ниже.
@IBAction func didPressButton(_ sender: Any) {
// if the button was selected, then deselect it.
// otherwise if it was not selected, then select it.
toggleButton.isSelected = !trackingButton.isSelected
if toggleButton.isSelected {
print("I am selected.")
} else {
print("I am not selected.")
}
}
Вы можете сделать это очень легко. Прежде всего, в вашем viewDidLoad
установить тег для вашей кнопки. Скажем self.toggleButton.tag = 111
, Теперь в вашей функции действия кнопки вы можете переключать кнопки, как:
- (IBAction)toggling:(id)sender{
if(self.toggleButton.tag == 111){
//this is normal state
[self.toggleButton setTitle:@"Less..." forState:UIControlStateNormal];
self.toggleButton.tag = 222;
}else{
//selected state
[self.toggleButton setTitle:@"More..." forState:UIControlStateNormal];
self.toggleButton.tag = 111;
}
}
Вы можете изменить изображение кнопки, как это [self.toggleButton setImage://some image forState:UIControlStateNormal];
. Это самый простой способ, я думаю. Надеюсь, это поможет.
Поскольку ваш вопрос упоминал rmq, вот способ rmq сделать это:
В viewDidLoad
:
@hello_world_label = rmq.append(UILabel, :hello_world).get
@button = rmq.append(UIButton, :toggleable_button)
@button.on(:touch) do |sender|
sender.selected = !sender.selected?
end
Обратите внимание, что переключение достигается путем запроса фактического состояния кнопки. Если вам нужно запомнить это для дальнейшего использования, вы можете сохранить его в переменной экземпляра.
В вашей таблице стилей:
def toggleable_button(st)
st.frame = {t: 200, w: 100, h: 24}
st.image_normal = image.resource('toggle_me')
st.image_selected = image.resource('toggled')
end
Обратите внимание на использование image_selected
, Ну, этого не существует в rmq, но вы можете сделать это довольно легко. Если это проект rmq, у вас будет каталог stylers/. Там вы должны увидеть ui_button_styler.rb. Вот код, чтобы сделать выделенное государство первоклассным гражданином:
module RubyMotionQuery
module Stylers
class UIButtonStyler < UIControlStyler
def image_selected=(value)
@view.setImage(value, forState:UIControlStateSelected)
end
def image_selected
@view.imageForState UIControlStateSelected
end
end
end
end
Как видите, код вашего контроллера остается чистым, начальные настройки кнопки смещены в таблицу стилей, и вы аккуратно расширили rmq, чтобы понять выбранное состояние.
Моя самая простая логика для переключения изображения кнопки.:)
(IBAction)toggleButton:(id)sender {
if (self.toggleButton.selected==YES) {
[self.toggleButton setSelected:NO];
}else{
[self.toggleButton setSelected:YES];
[self.toggleButton setImage:[UIImage imageNamed:@"favStar.png"] forState:UIControlStateSelected];
}