У меня есть два контроллера табличного представления, 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)
} * * тысяча двадцать-один