use*_*930 2 uitableview tableviewcell ios swift swift3
在我的swift应用程序中,我正在显示细胞UITableView,前10个细胞包含照片.我决定为每个单元格添加一个视差效果,这样当用户上下滚动表格时 - 图像会改变它的偏移量.
这是我从我的webservice获取数据并最初将其添加到tableview的方法:
func makePostQueryForFetchingData(_ parameters: [String:AnyObject], url: String, type: String)
{
Alamofire.request(url, method: .post, parameters: (parameters), encoding: JSONEncoding.default)
.validate()
.responseJSON { response in
switch response.result {
case .success:
DispatchQueue.main.async(execute: {
items.removeAllObjects()
tview.reloadData()
if let jsonData = response.result.value as? [[String: AnyObject]] {
for singleJSON in jsonData {
if let single = SingleNode.fromJSON(JSON(singleJSON)){
self.items.add(single)
}
}
}
self.refreshController.endRefreshing()
print("before crash")
self.tview.reloadData()
print("end")
})
case .failure(let error):
print(error)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我在启动时运行此功能 - 一切正常.但是,如果我向下滚动表格,然后快速向上滚动并拉动刷新 - 应用程序崩溃.
在拉动刷新我从上面调用函数.
处理视差效果的功能如下所示:
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView == self.tview) {
for indexPath in self.tview.indexPathsForVisibleRows! {
if (indexPath.row < 10) {
print(indexPath)
print(self.tview.cellForRow(at: indexPath))
self.setCellImageOffset(cell: self.tview.cellForRow(at: indexPath) as! BigDetailsOnListCell, indexPath: indexPath as NSIndexPath)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到当我快速滚动桌子并刷新它时 - 我在控制台中看到:
before crash
0
nil
fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)
那么为什么self.tview.cellForRow(at: indexPath)回报为零呢?
cellForRow(at:)如果tableview当前具有该行的可见单元格,则仅返回单元格.如果没有可见的单元格,它将不会调用您的表视图的数据源方法来获取单元格,它将返回nil.
你需要处理cellForRow(at:)可能返回零的事实.不要强行打开它.使用条件展开.同样地indexPathsForVisibleRows; 也没有充分理由强行解开这个价值.
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView == self.tview) {
if let visiblePaths = self.tview.indexPathsForVisibleRows {
for indexPath in visiblePaths {
if (indexPath.row < 10) {
if let cell = self.tview.cellForRow(at: indexPath as? BigDetailsOnListCell) {
self.setCellImageOffset(cell: cell, indexPath: indexPath as NSIndexPath)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |