我正在尝试为表格中的每个单元格创建一个切换按钮。按下时,它将改变图像,再次按下时,它将再次改变图像 - 切换。
在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
答案 0 :(得分:39)
您可以轻松创建切换按钮,只需为各个状态设置相应的图像,之后,您可以使用selected
属性在这些图像之间切换。
我制作了一个纯粹的Objective-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;
}
我希望这可以帮到你。
答案 1 :(得分:4)
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.")
}
}
答案 2 :(得分:1)
既然你的问题确实提到了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项目,你将拥有一个样式/目录。在那里,你应该看到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以了解所选状态。
答案 3 :(得分:0)
My easiest logic to toggle button image. :)
(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];
}
答案 4 :(得分:0)
你可以用一种非常简单的方法来做到这一点。首先,在您的按钮的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];
一样更改按钮的图像。这是我认为最简单的方法。希望它会有所帮助。