Динамически / программно назначить IBAction для кнопки - PullRequest
0 голосов
/ 22 октября 2018

Для моего проекта я создал меню заказа, в котором программно создаются кнопки, которые прокручиваются горизонтально.Однако я ищу способы назначить 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)
        }
    }
}

Можно ли добавить в еду.swift,

 var buttonTag = "" 

, затем назначьте тег отдельной кнопке.На UICollectionCell.swift добавьте тег.Использование условных выражений If ... else ... для сопоставления тега с отдельным IBAction {ref? .Child ... ")

Спасибо всем !!!

ps.Есть другой файл swiftдля расположения пунктов меню по горизонтали ..

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

из яблочного документа 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
    }
0 голосов
/ 22 октября 2018

Теги - это один из способов сделать это, но самый простой способ - это, вероятно, вызвать addTarget(_:action:for:) для каждого из них, чтобы настроить его действие, например,

button.addTarget(button,
                 action: #selector(buttonFunctionThatDoesSomething:),
                 for: .touchUpInside) // or .primaryActionTriggered

Первый аргумент - это объект, чей селектор (второй аргумент) должен быть вызван.Синтаксис #selector() действительно требователен;Вы можете прочитать этот SO-ответ , чтобы понять, как правильно его назвать.

...