将 UIKit 中多个表视图中的相同核心数据项添加在一起

问题描述 投票:0回答:1

我在下面添加了图表。您在图中可以看到的是一个保存食物的类。单击表格视图单元格,您可以看到一个新类,您可以在其中放置项目以及制作该食谱所需的数量。我想做的是当您单击第二类的表格视图单元格时。它会搜索所有食谱以查找该特定成分的累积量。在图中您可以看到我突出显示了苹果。在表格视图单元格上,它应该是,例如,苹果点击 3.0,总计 8.0

example

import UIKit

class Ingriendentsx: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        specifcGame.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? CustomOneTableViewCell
        
        if cell == nil {
            cell = UITableViewCell(style: .subtitle, reuseIdentifier: "Cell") as? CustomOneTableViewCell
        }
        
        let expense = specifcGame[indexPath.row]
        
    
        
        
        
        
        cell?.textLabel?.text = "\(expense.name!) hits \(expense.amount)"
        
        return cell ?? UITableViewCell()
    }
    
    
    var txt = UITextField()
    var btn = UIButton()
    var tble = UITableView()
    var lbl = UILabel()
    var txt2 = UITextField()
    var backB = UIButton()
    
    
    
    var ingreidentsAndAmount = [Ingriendents]()
    
    var inital : Recipe?
    var placeholder = String()
    
    private var specifcGame : [Ingriendents] = []
    
    
    
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        
        if let budget = inital {
            lbl.text = budget.recipeName
            
            //
            
            if let aE = budget.ir?.allObjects as? [Ingriendents] {
                specifcGame = aE
            }
            
            
            
        }
        
        
        
        
        [txt,btn, tble, lbl, txt2, backB].forEach {
            view.addSubview($0)
            $0.translatesAutoresizingMaskIntoConstraints = false
            $0.layer.borderWidth = 1
            $0.backgroundColor = UIColor(
                red: .random(in: 0.5...0.7),
                green: .random(in: 0.0...1),
                blue: .random(in: 0.3...0.5),
                alpha: 1
            )
            
            $0.layer.borderWidth = 1
            
            if let textfield = $0 as? UITextField {
                
                textfield.textAlignment = .center
            }
            
            if let label = $0 as? UILabel {
                
                label.textAlignment = .center
            }
            if let button = $0 as? UIButton {
                button.setTitleColor(.black, for: .normal)
            }
            
        }//below
        NSLayoutConstraint.activate([
            
            lbl.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
            lbl.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.05, constant: 0),
            lbl.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
            lbl.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            
            
            
            txt.topAnchor.constraint(equalTo: lbl.bottomAnchor),
            txt.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.05, constant: 0),
            txt.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
            txt.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            
            txt2.topAnchor.constraint(equalTo: txt.bottomAnchor),
            txt2.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.05, constant: 0),
            txt2.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
            txt2.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            
            
            
            btn.topAnchor.constraint(equalTo: txt2.bottomAnchor),
            btn.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.10, constant: 0),
            btn.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
            btn.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            
            
            tble.topAnchor.constraint(equalTo: btn.bottomAnchor),
            tble.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.50, constant: 0),
            tble.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
            tble.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            
            backB.topAnchor.constraint(equalTo: tble.bottomAnchor),
            backB.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.10, constant: 0),
            backB.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1, constant: 0),
            backB.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            
            
        ])
        tble.delegate = self
        tble.dataSource = self
        
        btn.addTarget(self, action: #selector(pressA), for: .touchDown)
        tble.register(CustomOneTableViewCell.self, forCellReuseIdentifier: "Cell")
        
        backB.addTarget(self, action: #selector(backer), for: .touchDown)
    }
    
    @objc func pressA(){
        guard let name = txt.text else {
            return
        }
        
        
        
        guard let calorieText = txt2.text, let count = Double(calorieText) else {
            return
        }

        
        guard let budget = inital else {
            return
        }
        
        
        
        
        
        let expense = DataManager.shared.saveToAttempts(name: name, amount: count, inz: budget)
        
        
        
        specifcGame.append(expense)
        
        tble.reloadData()
        DataManager.shared.save()
        txt.text = ""
        txt2.text = ""
        

    }
    
    @objc func backer(){
        self.dismiss(animated: true)
    }
    

}

class CustomOneTableViewCell: UITableViewCell {
    
    
}
swift core-data sum uikit tableview
1个回答
-1
投票
class IngredientsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    struct IngredientDetail {
        let ingredient: Ingredient
        let totalAmount: Double
    }
    
    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var amount: UITextField!
    @IBOutlet weak var addButton: UIButton!
    @IBOutlet weak var tableView: UITableView!
    
    var recipe: Recipe!
    var ingredientsDetail: [IngredientDetail] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureTableView()
        loadIngredients()
        navigationItem.title = recipe.recipeName
    }
    
    func configureTableView() {
        tableView.dataSource = self
        tableView.delegate = self
    }
    
    func loadIngredients() {
        let ingredientsFetchRequest = NSFetchRequest<Ingredient>(entityName: "Ingredient")
        
        if var fetchedAllIngredients = try? PersistenceController.shared.persistentContainer.viewContext.fetch(ingredientsFetchRequest) {
            
            // reset ingredientsDetail
            ingredientsDetail = []
            
            // filtering current recipe ingredients
            let recipeIngredients = fetchedAllIngredients.filter({ $0.recipe == recipe })
            
            for recipeIngredient in recipeIngredients {
                
                var totalAmount: Double = 0
                
                // name matching ingredients and calculating total amount
                // filtering to avoid rechecking matched ingredients
                fetchedAllIngredients = fetchedAllIngredients.filter({
                    if $0.name!.caseInsensitiveCompare(recipeIngredient.name!) == .orderedSame {
                        totalAmount += $0.amount
                        return false
                    }
                    return true
                })
                
                ingredientsDetail.append(
                    IngredientDetail(
                        ingredient: recipeIngredient,
                        totalAmount: totalAmount
                    )
                )
            }
            
        }
    }
    
    @IBAction func tappedAddIngredient() {
        if let ingredientName = name.text,
           !ingredientName.isEmpty,
           let amountText = amount.text,
           let amountDoubleValue = Double(amountText) {
            let ingredient = Ingredient(context: PersistenceController.shared.persistentContainer.viewContext)
            ingredient.name = ingredientName
            ingredient.amount = amountDoubleValue
            ingredient.recipe = recipe
            PersistenceController.shared.saveContext()
            loadIngredients()
            tableView.reloadData()
            name.text = ""
            amount.text = ""
        }
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        ingredientsDetail.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        var content = cell.defaultContentConfiguration()
        let ingredientDetail = ingredientsDetail[indexPath.row]
        if ingredientDetail.totalAmount > ingredientDetail.ingredient.amount {
            let attributedText = NSMutableAttributedString(string: "Name: \(ingredientDetail.ingredient.name!), Amount: \(ingredientDetail.ingredient.amount)")
            let boldAttributes: [NSAttributedString.Key: Any] = [.font: UIFont.systemFont(ofSize: 15, weight: .bold)]
            let totalAmount = NSAttributedString(string: ", Total Amount: \(ingredientDetail.totalAmount)", attributes: boldAttributes)
            attributedText.append(totalAmount)
            content.attributedText = attributedText
        } else {
            content.text = "Name: \(ingredientDetail.ingredient.name!), Amount: \(ingredientDetail.ingredient.amount)"
        }
        cell.contentConfiguration = content
        return cell
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.