автоматически отображать текст метки в табличном представлении - PullRequest
0 голосов
/ 13 января 2019

У меня есть два контроллера табличного представления, 2-й контроллер табличного представления содержит записи с различной опцией, чтобы добавить к первому контролле табличного представления. Первые строки контроллера табличного представления имеют два действия смахивания, т.е. завершены и удалены.

Каждая строка / ячейка имеет две метки, одна из которых содержит заголовок опции, выбранной в контроллере второго представления таблицы, а вторая метка - дату, когда она была создана.

Когда нажата завершенная операция смахивания, функция удара через наносит удар по тексту обеих меток.

Тем не менее, я замечаю, что каждый раз, когда я проводлю запись и удаляю ее, а затем снова добавляю эту же запись, она автоматически удаляет метку заголовка ячейки.

Если я вернусь и перезапущу 1-й контроллер вида, он очищает стик.

Этот удар происходит случайным образом, то есть иногда он наносит удар, а иногда не наносит удар, а функция сквозного удара даже не вызывается.

Любые предложения с благодарностью.

Просмотр контроллера1:

import UIKit

class nTableViewController: UITableViewController {

    @IBOutlet weak var progressBar: UIProgressView!


    var nItems:[TodoItem]! {

        didSet {
                progressBar.setProgress(progress, animated: true)
        }



    }
    var progress:Float{
        if nItems.count > 0 {
            return Float(nItems.filter({$0.completed}).count) / Float(nItems.count)
        }else {
            return 0
            }
        }




    var selectedTitle = String() {
        didSet {
            creatensItem(with: selectedTitle, modalDismiss: true)
    }
    }

    @IBAction func unwindtonsTBVC(segue:UIStoryboardSegue) { }



    //
    func  creatensItem(with titleRcvd:String, modalDismiss:Bool) {

            let newnItem = TodoItem.init(title: titleRcvd, completed: false, createdAt: Date(), itemIdentifier: UUID())
            newnItem.saveItem()
            if nItems == nil  {
            self.tableView.beginUpdates()
            self.nItems.append(newnItem)
            let indexPath = IndexPath(row: self.tableView.numberOfRows(inSection: 0), section:0)
            self.tableView.insertRows(at: [indexPath], with: .automatic)
            progressBar.setProgress(progress, animated: true)
            self.tableView.endUpdates()
        } else {
            print(LocalizedError.self)
        }


    }

    func completenItem(_ indexPath:IndexPath) {
        var nItem = nItems[indexPath.row]
        nItem.markAsCompleted()
        nItems[indexPath.row] = nItem


        let createdDate = nItem.createdAt
        let formatter = DateFormatter()
        formatter.dateFormat = "MMM d, yyyy hh:mm a"
        formatter.dateStyle = .medium
        formatter.timeStyle = .medium
        let finalDate = formatter.string(from: createdDate)




        if let cell = tableView.cellForRow(at: indexPath) as? nTableViewCell{
              cell.nPurposeLabel.attributedText  = strikeThroughText(nItem.title)
              cell.nsDateOutlet.attributedText  = strikeThroughText(finalDate)
            UIView.animate(withDuration: 0.1, animations: {
                cell.transform = cell.transform.scaledBy(x: 1.5, y: 1.5)
            }) { (success) in
                UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: .curveEaseOut, animations: {
                    cell.transform = CGAffineTransform.identity
                }, completion: nil)
            }
        }
//        if let indexPath = tableView.indexPath(for: cell){
//        var nItem = nItems[indexPath.row]
//        nItem.markAsCompleted()
//        cell.nPurposeLabel.attributedText  = strikeThroughText(nItem.title)
    }



    func strikeThroughText (_ text:String) -> NSAttributedString{
        let strokeEffect: [NSAttributedString.Key : Any] =
            [
                NSAttributedString.Key.strikethroughStyle: NSUnderlineStyle.single.rawValue,
                NSAttributedString.Key.strikethroughColor: (UIColor(red: 0.0, green: 1.0, blue: 1.0, alpha: 1.0))
                ]

        let attributeString = NSAttributedString(string: text, attributes: strokeEffect)
        return attributeString
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        loadData()
        tableView.reloadData()
        progressBar.setProgress(progress, animated: true)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        tableView.reloadData()
        loadData()
    }
    func loadData() {
        nItems = [TodoItem]()
        nItems = nDataManager.loadAll(TodoItem.self).sorted(by: {
            $0.createdAt < $1.createdAt
        })
        tableView.reloadData()
//        progressBar.setProgress(progress, animated: true)
    }
    // MARK: - Table view data source



    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1   }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {



        return nItems.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "nCell", for: indexPath) as! nTableViewCell



        let item = nItems[indexPath.row]


        let createdDate = item.createdAt
        let formatter = DateFormatter()
        formatter.dateFormat = "MMM d, yyyy hh:mm a"
        formatter.dateStyle = .medium
        formatter.timeStyle = .medium

        let finalDate = formatter.string(from: createdDate)

         cell.nPurposeLabel.text = item.title
         cell.nsDateOutlet.text = finalDate
        if item.completed {

            cell.nPurposeLabel.attributedText = strikeThroughText(item.title)
            cell.nsDateOutlet.attributedText = strikeThroughText(finalDate)
        }
        return cell
    }




    override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let deleteAction = UITableViewRowAction(style: .normal, title: "Delete") { (action: UITableViewRowAction, indexPath:IndexPath) in
            self.nItems[indexPath.row].deleteItem()
            self.nItems.remove(at: indexPath.row)
            self.tableView.deleteRows(at: [indexPath], with: .automatic)
        }
            let completeAction = UITableViewRowAction(style: .normal, title: "Complete") { (action: UITableViewRowAction, indexPath:IndexPath) in
                self.completenItem(indexPath)
            }

        if #available(iOS 11.0, *) {
            deleteAction.backgroundColor = #colorLiteral(red: 1, green: 0, blue: 0.150029252, alpha: 1)
            completeAction.backgroundColor = #colorLiteral(red: 0.1676996052, green: 0.1956448257, blue: 0.2248058021, alpha: 1)
        } else {

            deleteAction.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
        }
        return [deleteAction ,completeAction]
    }

View Controller 2:

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let nsVC = segue.destination as! nTableViewController
        nsVC.selectedTitle = selectednsTitle
    }

    func action (with selectednsTitle:String){

        performSegue(withIdentifier: "unwindtonsTBVCWithSegue", sender: self)

} * * тысяча двадцать-один

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...