indexpath.row 在tableView heightForRowAt 3 后重置

Posted

技术标签:

【中文标题】indexpath.row 在tableView heightForRowAt 3 后重置【英文标题】:indexpath.row reset after 3 inside tableView heightForRowAt 【发布时间】:2017-07-26 09:04:17 【问题描述】:

嗨,就像标题所说的那样,index.row 永远不会达到 4,而是从 [2,0] 开始。我的 tableView 有 5 行。我不知道它什么时候停止工作,但我确信在我添加 timeIndex 行之前它已经工作了。

这是我在显示时遇到问题的“在此处输入地址”字段

let timeIndex = 2
let DateLocation = 1
let locationIndex = 4
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 



    if userPickedDate && indexPath.row == timeIndex 
        return 50
    
    if userPickedDate && indexPath.row == DateLocation 

        return 0

    
    print("The indexPath: \(indexPath)")
    if remindMeOnLocationSwitch.isOn && indexPath.row == locationIndex 
        return 100

    
    if remindMeOnDay.isOn && indexPath.row == DateLocation
        return 300
     else if indexPath.row == DateLocation || indexPath.row == timeIndex || indexPath.row == locationIndex  
        return 0
    
    return 50


控制台输出

【问题讨论】:

表格视图中有多少个部分? 3 一个在第一个文本框的位置,然后一个在中间的提醒meomday 开始的地方,最后一个是[今天一周的待办事项] 我发布了一个答案,你可以看看希望你能理解为什么你的 indexPath 永远不会变成 4 【参考方案1】:

您可以检查 numberOfRowsInSection 中的内容

    func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int

    if(section == 0)
    return 1
    
    else if(section == 1)
        return 2
    else
        return 3
    


在 numberOfRowsInSection 中设置的行数应该是错误的

【讨论】:

【参考方案2】:

每个部分将有不同的行数。 这就是为什么您的 indexPath 永远不会达到 4 的原因。 [2,0] 表示第 2 节中的第 0 行。 您可以根据这样的部分检查行:-

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    if indexPath.section == 0

    else if indexPath.section == 1

    else if indexPath.section == 2
         if indexPath.row == 0
            // here is your fifth row return height for fifth row
         
    


【讨论】:

嘿,我不确定您是否错过了了解我的信息,但我无法显示的是“在此处输入地址”行,而不是 segmentControll【参考方案3】:

发现了忘记更新numberOfRowsInsideSection函数内的行数的问题

 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    // #warning Incomplete implementation, return the number of rows
    // Change from [1,4,1] to [1,5,1]
    let numberOfRowsInSection: [Int] = [1,5,1]
    var rows: Int = 0

    if section < numberOfRowsInSection.count 
        rows = numberOfRowsInSection[section]
    

    return rows

【讨论】:

以上是关于indexpath.row 在tableView heightForRowAt 3 后重置的主要内容,如果未能解决你的问题,请参考以下文章

indexpath.row 在tableView heightForRowAt 3 后重置

如何获取当前正在显示的tableView的indexPath.row?

如何从扩展的 collectionview 到达 tableview 的 indexpath.row?

(SWIFT 4)如何计算 tableview 中列 indexpath.row 的总和?

Swift 4.2 - 如何从 tableView 中的“didSelectRowAtIndexPath”方法调用“indexPath.row”到另一个类?

从 TableView Objective C 中获取 IndexPath.Row [重复]