Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Tableview Seçili Satırların değerlerini toplayıp bir label'a yazdırma

0 oy
26 kez görüntülendi
21, Nisan, 21 ios development kategorisinde dybala21 tarafından soruldu

Merhabalar. Tableview'ın detailLabel'ında uzak sunucudan çektiğim sayısal değerlerin string'e çevrilmiş halini tutuyorum. Bu veri web service'ten int olarak da geliyor. Hedefim yine aynı view controller'da bulunan bir label'ın text'ine checkmarked olan tableview rowlarının içerisindeki sayısal değerleri toplamını yazdırmak. didSelectRowAt methodunun içerisinde bu kod ile checkmarking olayını sağladım.

if let cell = tableView.cellForRow(at: indexPath as IndexPath) { if cell.accessoryType == .checkmark{ cell.accessoryType = .none } else{ cell.accessoryType = .checkmark } }

Seçili satırların değerlerini nasıl toplayabilirim? Teşekkürler.

1 cevap

0 oy
22, Nisan, 22 yasin tarafından cevaplandı
12, Mayıs, 12 dybala21 tarafından seçilmiş
 
En İyi Cevap

Konuyla alakalı basit bir örnek hazırladım.

//
//  ViewController.swift
//  tableViewCheckMark
//
//  Created by Yasin TURKOGLU on 22.04.2018.
//  Copyright © 2018 Yasin TURKOGLU. All rights reserved.
//

import UIKit

typealias Person = (name: String, age: UInt)

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UINavigationBarDelegate {

    let aTableView:UITableView = {
        let tableView = UITableView()
        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.tableFooterView = UIView()
        tableView.separatorInset = .zero
        tableView.separatorStyle = .singleLine
        tableView.allowsSelection = true
        tableView.allowsMultipleSelection = false
        return tableView
    }()

    let navigationBar:UINavigationBar = {
        let bar = UINavigationBar()
        bar.barTintColor = .orange
        bar.translatesAutoresizingMaskIntoConstraints = false
        return bar
    }()

    let navigationBarTitle = UINavigationItem()

    let persons:[Person] = [
        Person(name: "Ahmet",   age: 11),
        Person(name: "Mehmet",  age: 14),
        Person(name: "Ayşe",    age: 17),
        Person(name: "Fatma",   age: 10),
        Person(name: "Hasan",   age: 9),
        Person(name: "Hüseyin", age: 18),
        Person(name: "Zeynep",  age: 16),
        Person(name: "Dilek",   age: 13)
    ]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationBar.delegate = self
        self.navigationBar.items = [self.navigationBarTitle]
        self.view.addSubview(self.navigationBar)
        self.aTableView.delegate = self
        self.aTableView.dataSource = self
        self.view.addSubview(self.aTableView)
        if #available(iOS 11.0, *) {
            NSLayoutConstraint.activate([
                self.navigationBar.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                self.navigationBar.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
                self.navigationBar.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
                self.aTableView.topAnchor.constraint(equalTo: self.navigationBar.bottomAnchor),
                self.aTableView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),
                self.aTableView.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
                self.aTableView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor)
                ])
        } else {
            NSLayoutConstraint.activate([
                self.navigationBar.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                self.navigationBar.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
                self.navigationBar.topAnchor.constraint(equalTo: self.topLayoutGuide.topAnchor),
                self.aTableView.topAnchor.constraint(equalTo: self.navigationBar.bottomAnchor),
                self.aTableView.bottomAnchor.constraint(equalTo: self.bottomLayoutGuide.bottomAnchor),
                self.aTableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                self.aTableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
                ])
        }
        self.view.layoutIfNeeded()
        calculateAgesTotal()
    }

    func position(for bar: UIBarPositioning) -> UIBarPosition {
        return .topAttached
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.persons.count
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
         return 50.0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: UITableViewCell = {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {
                return UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "cell")
            }
            return cell
        }()
        let person = self.persons[indexPath.row]
        cell.textLabel?.text = "\(person.name)"
        cell.detailTextLabel?.text = "Age: \(person.age)"
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) {
            if cell.accessoryType == .checkmark{
                cell.accessoryType = .none
            } else{
                cell.accessoryType = .checkmark
            }
        }
        calculateAgesTotal()
        tableView.deselectRow(at: indexPath, animated: true)
    }

    func calculateAgesTotal() {
        var selectedAgeTotals:UInt = 0
        for i in 0..<self.persons.count {
            let indexPath = IndexPath(row: i, section: 0)
            if let cellAtIndexPath = self.aTableView.cellForRow(at: indexPath) {
                if cellAtIndexPath.accessoryType == .checkmark{
                    if let detailTextLabel = cellAtIndexPath.detailTextLabel {
                        if let ageText = detailTextLabel.text {
                            let isolatedAgeString = ageText.replacingOccurrences(of: "Age: ", with: "")
                            if let age = UInt(isolatedAgeString) {
                                selectedAgeTotals += age
                            }
                        }
                    }
                }
            }
        }
        if selectedAgeTotals > 0 {
            self.navigationBarTitle.title = "Selected ages total \(selectedAgeTotals)"
        } else {
            self.navigationBarTitle.title = "No person selected"
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}
12, Mayıs, 12 dybala21 tarafından yorumlandı

Projeye uğraştığım için hızlı bir biçimde dönüş yapamadım. Gösterdiğiniz şekilde yapabildim. İlginiz için çok teşekkür ederim.

...