动态/以编程方式为按钮分配IBAction
动态/以编程方式为按钮分配IBAction
我为我的项目创建了一个程序化创建水平滚动按钮的订购菜单。然而,我正在寻找一种动态地将IBAction(特别是用于写入Firebase数据库的操作)分配给这些按钮的方法... 是否可以通过给按钮添加标签并使用条件语句来实现?我的代码如下:
Food.swift - 每个菜单项的属性设置
class Food {
var title = ""
var featuredImage: UIImage
var color: UIColor
init(title: String, featuredImage: UIImage, color: UIColor) {
self.title = title
self.featuredImage = featuredImage
self.color = color
}
static func fetchFoods() -> [Food] {
return [
Food(title: " Biscuits", featuredImage: UIImage(named: "f1")!, color: UIColor(red: 63/255.0, green: 71/255.0, blue: 80/255.0, alpha: 0.6)),
Food(title: " Sandwich", featuredImage: UIImage(named: "f2")!, color: UIColor(red: 63/255.0, green: 71/255.0, blue: 80/255.0, alpha: 0.6)),
Food(title: " Veg Sandwich", featuredImage: UIImage(named: "f3")!, color: UIColor(red: 63/255.0, green: 71/255.0, blue: 80/255.0, alpha: 0.6))
]
}
}
UICollectionCell.swift
import UIKit
class FoodCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var featuredImageView: UIImageView!
@IBOutlet weak var backgroundColorView: UIView!
@IBOutlet weak var foodButton: UIButton!
var food: Food? {
didSet {
self.updateUI()
}
}
private func updateUI() {
if let food = food {
featuredImageView.image = food.featuredImage
backgroundColorView.backgroundColor = food.color
foodButton.setTitle("\(food.title)", for: .normal)
} else {
featuredImageView.image = nil
backgroundColorView.backgroundColor = nil
foodButton.setTitle("", for: .normal)
}
}
}
我可以在Food.swift中添加以下内容:
var buttonTag = ""
然后为每个按钮分配标签。在UICollectionCell.swift中,追加标签。使用If...else...条件语句将标签与各个IBAction匹配 {ref?.child("...")}
谢谢大家!!!
附注:还有一个用于水平排列菜单项的swift文件。
动态/以编程方式将IBAction分配给按钮的出现原因是需要在程序中创建的特定按钮上动态分配一个操作。这是因为在使用Interface Builder创建界面时,可以直接将按钮与操作关联起来,但在以编程方式创建按钮时,需要以编程方式分配操作。
解决方法是在创建按钮时,使用addTarget函数将特定的操作分配给按钮。可以通过为按钮设置不同的标题来使每个按钮对象唯一,然后在触发按钮时,调用相应的操作来处理按钮的事件。
具体的解决方法可以参考以下代码示例:
// 创建按钮
let button = UIButton()
button.setTitle("Button Title", for: .normal)
// 分配操作
button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
// 按钮触发时调用的操作
@objc func buttonTapped(_ sender: UIButton) {
// 在这里执行你想要的操作
}
通过以上代码,可以通过设置按钮的标题来使每个按钮对象唯一,并使用addTarget函数将按钮的触发事件与相应的操作关联起来。当按钮被触发时,会调用相应的操作来处理按钮的事件。
希望以上内容对你有帮助!
问题的原因是:在编程中,需要动态地为一个按键分配一个动作。具体来说,问题是如何通过代码为一个动态创建的按钮分配一个动作。
解决方法是:使用addTarget(_:action:for:)
方法来为每个按钮设置它的动作。具体来说,可以使用以下代码为按钮设置动作:
button.addTarget(button,
action: #selector(buttonFunctionThatDoesSomething:),
for: .touchUpInside) // or .primaryActionTriggered
在这里,第一个参数是要调用其选择器(第二个参数)的对象。注意,#selector()
语法非常严格,需要仔细阅读相关文档来正确使用它。
对于动态创建的按钮,可以使用按钮的标题来区分它们,从而使每个按钮对象都是唯一的。通过使用这种方法,可以为每个按钮分配不同的动作。
文章内容如下:
在编程中,有时候我们需要动态地为按钮分配一个动作。具体来说,我们想知道如何通过代码为一个动态创建的按钮分配一个动作。
解决这个问题的方法很简单,我们可以使用addTarget(_:action:for:)
方法来为按钮设置它的动作。具体来说,我们可以通过以下代码为按钮设置动作:
button.addTarget(button,
action: #selector(buttonFunctionThatDoesSomething:),
for: .touchUpInside) // or .primaryActionTriggered
在这里,addTarget
方法的第一个参数是要调用其选择器(第二个参数)的对象。我们可以将按钮对象作为第一个参数传递给addTarget
方法,以便在按钮被点击时调用相应的选择器。
需要注意的是,#selector()
语法非常严格,我们需要仔细阅读相关文档以确保正确使用它。
对于动态创建的按钮,我们可以使用按钮的标题来区分它们,从而使每个按钮对象都是唯一的。通过使用这种方法,我们可以为每个按钮分配不同的动作。
希望这个解决方法对你有帮助!