テーブルビューがスムーズにスクロールしません。私はリンゴからこのコメントを見ました。 Perfect smooth scrollingコードをwillDisplayHeaderViewに移動してTableViewのスクロールを改善します
から
But very important thing is still there: tableView:cellForRowAtIndexPath: method, which should be implemented in the dataSource of UITableView, called for each cell and should work fast. So you must return reused cell instance as quickly as possible.
Don’t perform data binding at this point, because there’s no cell on screen yet. For this you can use tableView:willDisplayCell:forRowAtIndexPath: method which can be implemented in the delegate of UITableView. The method called exactly before showing cell in UITableView’s bounds.
だから私は(私はカスタムセクションを持っているので、私はセクションを使用してというよりも、この具体例の行い、注意してください)willDisplayHeaderViewにviewForHeaderInSectionにすべての私のコードを実装しようとしています。しかし、私は「致命的なエラー:オプションの値アンラップしながら、予想外にnilを見つけ、」取得しています以下は
let cell = tableView.headerViewForSection(section) as! TableSectionHeader
はオリジナル(注
をクラッシュした私の元と試みたコードですでエラーが、このコードでは、と正常に動作します私が改善しようとしているいくつかのマイナーなスクロール遅れの問題)
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("TableSectionHeader") as? TableSectionHeader {
// Cancel request of current cell if there is a request going on to prevent requesnt info from background from previous use of same cell
cell.AlamoFireRequest?.cancel()
var image: UIImage?
if let url = post.imageUrl {
image = DiscoverVC.imageCache.objectForKey(url) as? UIImage
}
cell.configureCell(post) // This is data binding part
cell.delegate = self
return cell
} else {
return TableSectionHeader()
}
}
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
}
試み
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("TableSectionHeader") as? TableSectionHeader {
return cell
} else {
return TableSectionHeader()
}
}
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
let cell = tableView.headerViewForSection(section) as! TableSectionHeader
// Cancel request of current cell if there is a request going on to prevent requesnt info from background from previous use of same cell
cell.AlamoFireRequest?.cancel()
var image: UIImage?
if let url = post.imageUrl {
image = DiscoverVC.imageCache.objectForKey(url) as? UIImage
}
cell.configureCell(post) // This is data binding part
cell.delegate = self
}
-----更新マイケルの答えに対処するための------
回答の単語の制限は、ここでは、あるとして、あなたが正しいマイケル
からの回答を受けている、私は更新されています私は自分の質問からスニペットを得た。私の間違い
私は問題が非常にうまくいく可能性があることに同意します。しかし、これは私が現時点で行っていることです。私のテーブルビューはOKをスクロールしますが、画像があるときに少し遅くなります。だから、私は何らかの措置をとって、何らかの潜在的な原因を撃退しています
私が具体的に使用しなかった理由は、ここに表示されるセルがTableSectionHeaderであることを期待していたためです。私はそれだけでそれを追加しようとしたと私はいつも失敗したキャストを取得します。
なぜ私がUITableViewHeaderFooterViewをサブクラス化するのは、私のheaderviewがfunc configureCell()を持つXibファイルであり、cell.configureCellを呼び出すことができるからです。 (そして他の多くの機能)
マイヘッダは任意とすることができるタイトル、日付、firebase
- ラベルのようないくつかの項目を含む
- 画像記述
- btn、コメントbtn、more、btnのように
これらの機能はすべて私のTableSectionHeader.swi UITableViewHeaderFooterViewから継承したftft
"あなたはヘッダー内に状態を格納しようとしているように疑わしいと思っています - あなたはtableViewの外に状態を保存するべきですか?"
Alamofireのリクエストを取り消す理由は、セルがデキューされるためです。したがって、ユーザーが本当に速くスクロールすると、セルは多くのalamofire要求を取得します。だから、私はまずそれをキャンセルし、ダウンロード要求を再オープンします(内部のセル。私がキャッシュに何も持っていない場合はconfigureCell)
印刷セクションがどのように識別されるかわかりません。私は、ここではすべてをwillDisplayHeaderViewコードに入れていることは、私が思うに、間違っていると思っています(ほとんどの場所で、代わりにviewForHeaderInSectionに配置します)。または単に構文だけです。
私はちょうどそれを試して、キャストは何らかの理由でいつも失敗しますか? – user172902