2

TableView に問題があります。セクション フッターを追加した後、スワイプして削除すると移動することに気付きました。

私が直面している問題を示すために、この機能だけで最小限のプロジェクトを作成しました。これは私が得る結果です

スワイプする前に スワイプ後

私は 2 つの TableViewCell を持っています: DetailCell

import UIKit

class DetailCell: UITableViewCell {


@IBOutlet weak var myTextLabel: UILabel!


override func awakeFromNib() {
    super.awakeFromNib()
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
}

}

および HeaderFooterCell

import UIKit

class HeaderFooterCell: UITableViewCell {
@IBOutlet weak var thisTextLabel: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
}

}

これはtableViewControllerです

import UIKit

class TableViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let statusBarHeight = UIApplication.shared.statusBarFrame.height
    self.tableView.contentInset = UIEdgeInsetsMake(statusBarHeight, 0.0, 0.0, 0.0)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myTableViewCell", for: indexPath) as! DetailCell
        switch indexPath.row {
            case 0: cell.myTextLabel?.text = "one - one - one - one"
            case 1: cell.myTextLabel?.text = "two - two - two - two"
            case 2: cell.myTextLabel?.text = "three - three - three - three"
            case 3: cell.myTextLabel?.text = "four - four - four - four"
            case 4: cell.myTextLabel?.text = "five - five - five - five"
            default: break
        }
        return cell
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 44
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerOrFooterCell") as! HeaderFooterCell
    cell.thisTextLabel.text = "Less"
    return cell
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 44
}
override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerOrFooterCell") as! HeaderFooterCell
    cell.thisTextLabel.text = "More"
    return cell
}

// MARK: RowAction for DELETE and MODIFY
override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let delete = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
        print ("Delete")
    }

    let modify = UITableViewRowAction(style: .normal, title: "Modify") { (action, indexPath) in
        print("Modify")
    }

    return [delete, modify]
}

}

私は間違いを犯しましたか、またはヘッダーとフッターを水平方向に「ブロック」する方法はありますか?

4

1 に答える 1

4

ヘッダーとフッターのタイプを UITableViewHeaderFooterView に変更し、.dequeueReusableHeaderFooterView(withIdentifier: "headerOrFooterCell") tableView メソッドを使用します。ニブを登録することを忘れないでください。以下のコードをテストしましたが、問題なく動作します。

import UIKit

class DetailCell: UITableViewCell {
  @IBOutlet weak var myTextLabel: UILabel!
  override func awakeFromNib() {
    super.awakeFromNib()
  }
}



class HeaderFooterCell: UITableViewHeaderFooterView {
  @IBOutlet weak var thisTextLabel: UILabel!

  override func awakeFromNib() {
    super.awakeFromNib()
  }
}


class TableViewController: UITableViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    let statusBarHeight = UIApplication.shared.statusBarFrame.height
    self.tableView.contentInset = UIEdgeInsetsMake(statusBarHeight, 0.0, 0.0, 0.0)

    self.tableView.register(UINib(nibName:"DetailCell", bundle: nil), forCellReuseIdentifier: "myTableViewCell")
    self.tableView.register(UINib(nibName:"HeaderFooterCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "headerOrFooterCell")
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }

  // MARK: - Table view data source

  override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
  }

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


  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myTableViewCell", for: indexPath) as! DetailCell
    switch indexPath.row {
    case 0: cell.myTextLabel?.text = "one - one - one - one"
    case 1: cell.myTextLabel?.text = "two - two - two - two"
    case 2: cell.myTextLabel?.text = "three - three - three - three"
    case 3: cell.myTextLabel?.text = "four - four - four - four"
    case 4: cell.myTextLabel?.text = "five - five - five - five"
    default: break
    }
    return cell
  }

  override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 44
  }
  override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let cell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "headerOrFooterCell") as! HeaderFooterCell

    cell.thisTextLabel.text = "Less"
    return cell
  }

  override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 44
  }
  override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "headerOrFooterCell") as! HeaderFooterCell
    cell.thisTextLabel.text = "More"
    return cell
  }

  // MARK: RowAction for DELETE and MODIFY
  override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let delete = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
      print ("Delete")
    }

    let modify = UITableViewRowAction(style: .normal, title: "Modify") { (action, indexPath) in
      print("Modify")
    }

    return [delete, modify]
  }

}
于 2016-10-20T23:18:51.997 に答える