在 Swift 中编辑 TableViewCell 的内容列表
Posted
技术标签:
【中文标题】在 Swift 中编辑 TableViewCell 的内容列表【英文标题】:Edit the contents list of TableViewCell in Swift 【发布时间】:2016-12-29 06:38:32 【问题描述】:我有一个TableViewController
,其中包含使用CoreData
的数据条目列表。我也有ViewController
和UITextView
,由Segue 链接到TableViewController
。我已经完成了对项目的添加、保存和删除等操作。
现在我正在通过将选定的TableViewCell
链接到下一个ViewController
上的UITextView
进行编辑。我已经在ViewController.I
上创建了一个操作DONE,能够将数据从选定的单元格传递到下一个@987654330 的TextView @ 使用 Segue。
现在,我需要更新UITextView
上的编辑文本,方法是单击完成按钮返回TableViewController
的单元格,并将数据保存到CoreData
。请提供真正的建议和建议....我是 Swift 新手,我在此处附上了我的代码。
import UIKit
import CoreData
class ToDoTableViewController: UITableViewController
var listItems = [NSManagedObject]()
override func viewDidLoad()
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.add, target: self , action: #selector(ToDoTableViewController.addItem))
func addItem()
let alertController = UIAlertController(title: "To Do Tasks Lists!!!!", message: "Write Down...", preferredStyle: .alert)
let confirmAction = UIAlertAction(title: "Confirm", style: UIAlertActionStyle.default, handler: (
(_) in
if let field = alertController.textFields![0] as? UITextField
self.saveItem(itemToSave: (field.text!))
self.tableView.reloadData()
))
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)
alertController.addTextField(configurationHandler: (
(textField) in
textField.placeholder = "Type in Something!!!!"
))
alertController.addAction(confirmAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
func saveItem(itemToSave : String)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let entity = NSEntityDescription.entity(forEntityName: "ListEntity", in: managedContext)
let item = NSManagedObject(entity: entity!, insertInto: managedContext)
item.setValue(itemToSave, forKey: "item")
do
try managedContext.save()
listItems.append(item)
catch
print("Error")
override func viewWillAppear(_ animated: Bool)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ListEntity")
do
let results = try managedContext.fetch(fetchRequest)
listItems = results as! [NSManagedObject]
catch
print("Error")
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
return true
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
if editingStyle == .delete
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let objectToDelete = listItems[indexPath.row]
listItems.remove(at: indexPath.row)
managedContext.delete(objectToDelete)
tableView.deleteRows(at: [indexPath], with: .fade)
do
try managedContext.save()
catch
print("Error")
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return listItems.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! as UITableViewCell
let item = listItems[indexPath.row]
cell.textLabel?.text = item.value(forKey: "item") as! String?
cell.backgroundColor = UIColor.clear
return cell
func getIndexPathForSelectedCell() -> IndexPath?
var indexPath2:IndexPath?
if tableView.indexPathsForSelectedRows!.count > 0
indexPath2 = tableView.indexPathsForSelectedRows![0]
return indexPath2
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if (segue.identifier == "detailView")
if let indexPath2 = getIndexPathForSelectedCell()
// here write code for move to next controller.
let vc = segue.destination as! TextEditViewController
//vc.FirstString = listItems[(indexPath2 as NSIndexPath).row] as String
let item = listItems[(indexPath2 as NSIndexPath).row]
vc.FirstString = (item.value(forKey: "item") as! String?)!
//TextEditViewController
import UIKit
import CoreData
class TextEditViewController: UIViewController
@IBOutlet weak var textEdit: UITextView!
var FirstString = String()
override func viewDidLoad()
super.viewDidLoad()
textEdit.text = FirstString
print(self.FirstString)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
【问题讨论】:
打印项目数据并在那里调试并检查它 Himanshu Moradiya @U 没有任何想法 ,,,... 你来这里只是为了获得支持和批准的诱饵。你之前没有解决我的问题!! 在 secondVC 上编辑后是否要更新 coredata 中的文本并将其显示到 FirstVC 上的 tableview 中? 是的,先生......请帮助我......我已经把所有东西都写在那里了@Dheeraj D @AngelKajol 检查我的答案,我为您提供了如何在您的案例中使用核心数据的简单逻辑。 【参考方案1】:将您的 CoreData 模型引用传递到下一个屏幕:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if (segue.identifier == "detailView")
if let indexPath2 = getIndexPathForSelectedCell()
// here write code for move to next controller.
let vc = segue.destination as! TextEditViewController
//vc.FirstString = listItems[(indexPath2 as NSIndexPath).row] as String
let item = listItems[(indexPath2 as NSIndexPath).row]
vc.FirstString = (item.value(forKey: "item") as! String?)!
vc.recentItem = item; //Like this. Create a recentItem refrence to your next controller of NSManagedObject or your custom core data modal.
当您在TextEditViewController
中完成编辑后:
recentItem.item = "String" //Your updated string
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
do
try managedContext.save()
catch
print("Error")
希望这会奏效...!!
【讨论】:
我应该在哪里添加这个先生?? recentItem.item = "String" //你更新的字符串 let appDelegate = UIApplication.shared.delegate as! AppDelegate let managedContext = appDelegate.managedObjectContext do try managedContext.save() catch print("Error") If U wish 可以编辑我问的问题。 @Dheeraj D 完成编辑后,在 TextViewController 中写入 recent.item = string。以及完成按钮操作中的所有剩余代码 让我检查一下,我会回复你的以上是关于在 Swift 中编辑 TableViewCell 的内容列表的主要内容,如果未能解决你的问题,请参考以下文章
Swift:如何以编程方式在 TableViewCell 中显示 CollectionView
如何在 Swift 3.0 中选择 JSON 输出到 TableViewCell 中?
在 TableViewCell 中保持 UISwitch 的状态:Swift
无法在 Swift 中展开和折叠 TableViewCell