Swift:cellForRowAtIndexPath 未按 indexPaths 的顺序调用

Posted

技术标签:

【中文标题】Swift:cellForRowAtIndexPath 未按 indexPaths 的顺序调用【英文标题】:Swift: cellForRowAtIndexPath not called in the order of indexPaths 【发布时间】:2014-09-08 12:47:06 【问题描述】:

起初 indexpath 是按 0,1,2 的顺序调用的...但是在单击 table view 后,func tablview 调用 indexpath 似乎完全随机,因此我无法重现相同的数据.我正在使用数组来关联表格的行。

代码在这里:

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView!) -> Int 
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1



override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int 
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return  myList.count

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! 
// Configure the cell...

    println("table view --> ")
    let CellID : NSString = "Cell"
    var cell : UITableViewCell = tableView?.dequeueReusableCellWithIdentifier(CellID)as UITableViewCell
     var VehicleName = cell.viewWithTag(1) as UILabel
     var VehicleNumber = cell.viewWithTag(2) as UILabel

     if let ip = indexPath
     

        VehicleName.text = arrayData[ip.row*2];
        VehicleNumber.text = arrayData[ip.row*2+1];
    
 
     return cell

 

【问题讨论】:

你为什么期望 indexPaths 的顺序?此外,您在这里提到了很多错误的函数名称。请明确您想在这里实现什么,到目前为止您尝试过什么,以及什么不起作用。 我正在从 arrayData 获取数据并使用 indexPath 串行获取数据。因此,当 cellForRowAtIndexPath 没有像之前那样在序列中调用时,我会在表格上显示随机数据。 【参考方案1】:

你有一个设计问题。您需要能够以随机访问方式提供所请求的数据。

研究关于 UITableView 和 `UITableViewDataSource' 的文档。

API 在需要数据时调用 cellForRowAtIndexPath,它只是请求它需要显示的数据,而不是每次都请求所有数据。它只创建正在显示的单元格。如果您有 1000 行数据并显示第 900 行到第 903 行,则它只需要该数据。如果视图滚动显示多行,它只需要来自第 904 行的更多数据。

【讨论】:

谢谢。我可能会尝试更改对我的数组的依赖关系。【参考方案2】:

绝对不能保证 indexPaths cellForRowAtIndexPath 被调用的顺序。它基于 UIKit 框架。

您需要并且可以完全控制数据源数组保存数据的方式。在这种情况下,它是arrayData - 我也有一种感觉,这在某种程度上与myList 相关,但从您的代码sn-p 中看不到它。研究元素在 arrayData 中的排列方式,然后您将在所有单元格中拥有预期的元素。

【讨论】:

谢谢,会尽量让它独立于我的数组。

以上是关于Swift:cellForRowAtIndexPath 未按 indexPaths 的顺序调用的主要内容,如果未能解决你的问题,请参考以下文章

UITableView - 插入带有动画问题的行

检测 UITableViewCell 子视图内的触摸

iOS UITableView:“cellForRowAtIndexPath”和“willDisplayCell:forRowAtIndexPath:”有啥区别

在 UITableViewCell 中检测具有灵活宽度的视图的最终布局大小

swift [Swift Notes]在学习Swift #Swift的同时收集笔记

Swift 反射