编辑表格行单元格swift 3

时间:2017-04-19 15:33:43

标签: ios uitableview swift3

我正在尝试编辑表格行单元格。我有不同的tableViewController设置为当他们触摸来自初始tableViewController的显示事件时显示/编辑当前事件。每当我编辑一个事件并点击保存时,它会返回到我最初显示我的事件的主viewController,但它不会显示已编辑的事件。它不断显示原始事件。

这是我的主tableView文件中我正在显示我的事件的部分:

class EventsTable: UIViewController, UITableViewDataSource, UITableViewDelegate {

var tableData = ViewController()

@IBOutlet weak var table: UITableView!


@IBAction func saveToMainViewController (change:UIStoryboardSegue) {

    let editViewController = change.source as! EditEventsTableViewController

    let index = editViewController.index

    let titleString = editViewController.editedTitle

    tableData.eventsArray[index!].title = titleString

    table.reloadData()
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return tableData.eventsArray.count
}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomeCell

    cell.eventTitle.text = tableData.eventsArray[indexPath.row].title

    cell.eventLocation.text = tableData.eventsArray[indexPath.row].location

    cell.eventDateAndTime.text = tableData.eventsArray[indexPath.row].date

    return cell
}

//function to delete cell and saves it
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        tableData.eventsArray.remove(at: indexPath.row)

        table.reloadData()

        let savedEvents = NSKeyedArchiver.archivedData(withRootObject: tableData.eventsArray)

        UserDefaults.standard.set(savedEvents, forKey: "savedEvents")

        UserDefaults.standard.synchronize()
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "edit" {

        var path = table.indexPathForSelectedRow

        let detailViewController = segue.destination as! EditEventsTableViewController

        detailViewController.index = path?.row
        detailViewController.eventsArray = tableData.eventsArray
    }

}

这是我编辑数据的另一个tableViewController

class EditEventsTableViewController: UITableViewController {

@IBOutlet weak var txtEditTitle: UITextField!

var index:Int!

var eventsArray = [Event]()

var editedTitle: String!

override func viewDidLoad() {
    super.viewDidLoad()

    txtEditTitle.text = eventsArray[index!].title
}


 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.section == 0 && indexPath.row == 0 {
        txtEditTitle.becomeFirstResponder()
    }
    tableView.deselectRow(at: indexPath as IndexPath, animated: true)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "save" {
        editedTitle = txtEditTitle.text
    }
}
}

你们需要更好地了解这个项目, 项目download link

1 个答案:

答案 0 :(得分:0)

可能在EditEventsTableViewController您错过了表格视图重新加载?

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.reloadData()
    txtEditTitle.text = eventsArray[index!].title
}

目前尚不清楚,您在哪里为EditEventsTableViewController提供数据。是故事板中设计的静态表视图吗?