TableViewを設定して、セルに触れると高さが拡大してより多くの情報が表示されるようにします。 tableViewには5つのセクションがあります。
バグがあります:セルが展開すると、そのセルの下のすべてのheadersCellsが非表示になります。コンソールは次を出力します:「[31233:564745]再利用されるテーブルセルのインデックスパスがありません」
ストーリーボードには、2つのカスタムセルがあります。データを保持するセルの「myCell」と、ヘッダーの「headerCell」です。
func tableView(tableView:UITableView、didSelectRowAtIndexPath indexPath:NSIndexPath){
let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row]
if self.currentPath != nil && self.currentPath == indexPath {
self.currentPath = nil
} else {
self.currentPath = indexPath
}
tableView.beginUpdates()
tableView.endUpdates()
}
更新の開始/終了の間にtableView.reloadData()を入力すると、ヘッダーの背景が黒くなり、アニメーションが失われますが、正常に機能します。
ヘッダーのすべてのものが宣言されています:func tableView(tableView:UITableView、viewForHeaderInSection section:Int)-> UIView?
私は何が欠けていますか? tableViewにはまだアニメーションがあり、背景はclearColor()のままにしておきたいです。
前もって感謝します。 Objective Cの回答を読みましたが、それらを私のために働かせることができませんでした。 Swiftヘルプ。
問題は、再利用されるテーブルセルのインデックスパスがないことだと思います。
コンソールの出力で答えを見つけました。ヘッダー関数で次のコードを使用します。
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
headerCell
または再利用可能な識別子を返さないでください。 reuseIdentifier.contentView
。私にとっては:return headerCell!.contentView
。
付け加えると、セルのcontentViewを参照できない理由について、本来あるはずだったよりもずっと長い間WAYに当惑しました。カスタムクラス(UITableViewHeaderFooterViewではなくUITableViewCellを使用)は、毎回致命的なエラーを返します。したがって、カスタムスタイリングがUITableViewHeaderFooterViewクラスの下で設定されていることを確認してください。
class CustomHeaderCell: UITableViewHeaderFooterView {
また、次のようにresuableIdentiferを登録する必要があります。
tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader")
それからこの悪い男の子:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell!
return headerCell!.contentView
}
私はまだ50の評判に達していないので、前の回答にコメントすることはできません。そのため、これを別の回答として記載することをおizeびします。
ContentViewを返すと、関数は機能しますが、reuseIdentifier(headerCell)に対して行われたすべてのフォーマットが削除されます。
headerCell.backgroundColor = UIColor.cyanColor()
これはheaderCellにシアン色を提供しません
これを修正するには、フォーマット行に「.contentView」を追加するだけです
headerCell.contentView.backgroundColor = UIColor.cyanColor()
アプリをIOS 10-Apple開発者APIドキュメントのテーブルヘッダーに追加しました。追加したとき、以下、欠落しているヘッダーが再登場しました!
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
return 44 // where 44 is the header cell view height in my storyboard
}
UITableViewHeaderFooterView
の代わりにdequeueメソッドを使用してセルを返していたため、同じバグがありました。
UITableViewHeaderFooterView
に設定します@IBOutlet
_へのリンクfunc tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
でアウトレットを返しますヘッダーサイズを設定することを忘れないでください。アウトレットを強力に設定することを忘れないでください。
TableviewcellをUIView内にラップできます
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let containerView = UIView()
guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "MyHeaderView") as? MyHeaderView else { fatalError(" Failed to load MyHeaderView") }
containerView.addSubview(headerCell)
return containerView
}