Для своего проекта я создал меню заказа, которое программно создает кнопки, которые прокручиваются по горизонтали. Однако я ищу способы назначить 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 ... ")
Спасибо всем!!!
ps. Есть еще один быстрый файл для размещения пунктов меню по горизонтали ..
Как следует из названия, Interface Builder Action предназначен только для IB. Просто добавьте цель.





Теги - один из способов сделать это, но самый простой способ - это, вероятно, вызвать addTarget(_:action:for:) на каждом из них, чтобы настроить его действие, например
button.addTarget(button,
action: #selector(buttonFunctionThatDoesSomething:),
for: .touchUpInside) // or .primaryActionTriggered
Первый аргумент - это объект, селектор которого (второй аргумент) должен быть вызван. Синтаксис #selector() действительно разборчив; вы можете прочитать этот ТАК ответ, чтобы выяснить, как его правильно назвать.
Спасибо! Не похоже, чтобы я повторяю вопрос: как назначить функцию addTarget определенной кнопке, которая создается программно? Я полагаю, вам нужно сделать каждый объект кнопки уникальным? Сможет ли название кнопки, которая создается программно, выполнять свою работу?
из документа Apple https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementingACustomControl.html. :
button.addTarget(self, action: #selector(funcName), for: .touchUpInside)
а потом:
@objc func funcName() {
//do what u want in here
}
Спасибо! Не похоже, чтобы я повторяю вопрос: как назначить функцию addTarget определенной кнопке, которая создается программно? Я полагаю, вам нужно сделать каждый объект кнопки уникальным? Сможет ли название кнопки, которая создается программно, выполнять свою работу?
Я не уверен, правильно ли я вас понял, но вы можете передать заголовок кнопки своей функции в качестве аргумента и делать то, что хотите.
Вы должны изучить использование метода
addTarget(_ target: Any?, action: Selector, for controlEvents: UIControl.Event)на кнопке.