简体   繁体   中英

Expanded and Swipe-able cell in TableView

I have TableView , where users can click and expand each cell (UI: click ). This is the code for that (also I created .xib file to layout this cell):

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating  {
 var selectedIndex: IndexPath?
    var isExpended = false

    func didExpandCell() {
        self.isExpended = !isExpended
        self.tableView.reloadRows(at: [selectedIndex!], with: .automatic)

    }
    @IBOutlet weak var tableView: UITableView!
...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "wordCell", for: indexPath) as! CellController
        if searchController.isActive {
            cell.word.text = filtered[indexPath.row].word
            cell.translation.text = filtered[indexPath.row].translation
            cell.date.text = filtered[indexPath.row].fullDate
            cell.exOne.text = filtered[indexPath.row].exOne
            cell.exTwo.text = filtered[indexPath.row].exTwo
        } else {
            cell.word.text = words[indexPath.row].word
            cell.translation.text = words[indexPath.row].translation
            cell.date.text = words[indexPath.row].fullDate
            cell.exOne.text = words[indexPath.row].exOne
            cell.exTwo.text = words[indexPath.row].exTwo
        }
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.selectedIndex = indexPath
        self.didExpandCell()
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if isExpended && self.selectedIndex == indexPath {
            return 180
        }
        return 70
    }
}

Also, all Cells are swipe-able. This is the code:

func tableView(_ tableView: UITableView, editActionsForRowAt: IndexPath) -> [UITableViewRowAction]? {
        let edit = UITableViewRowAction(style: .normal, title: "Edit") { action, index in
            print("Edit")
        }
        edit.backgroundColor = .blue

        let delete = UITableViewRowAction(style: .normal, title: "Delete") { action, index in
            print("Delete")
        }
        delete.backgroundColor = .red

        return [delete, edit]
    }

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

The problem:

When I swipe Cell, it always expends in a half, this is my UI after swiping: click . Is it possible not to expand Cell if I swipe them?

Excuse me, but the problem was that I haven't set constraints for expanded version of the cell. That's why this labels were moving with swipe menu. Now it works. Thank you for all your replies!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM