在任何 tableView 函数之外获取索引路径

Posted

技术标签:

【中文标题】在任何 tableView 函数之外获取索引路径【英文标题】:Get indexpath outside of any tableView function 【发布时间】:2015-10-20 20:55:36 【问题描述】:

也许我的问题很简单,但我太愚蠢了,无法理解。 我的问题是我想在

之外访问 indexPath
overide func tableView(...)

所以我在我的 TableView 类中,并且有一个单独的类,例如:

func setColor()

...

在这个类中,我想访问 indexPath。我该怎么做?

【问题讨论】:

将 indexPath 作为参数传递。 你需要明确你的目标是什么。这个setColor 方法是如何以及何时被调用的?它在哪个班级? 我在 TableView 类中,在另一个类之外我调用这个函数,名为 setColor。 所以,其他一些类调用setColorsetColor 需要索引路径做什么?它设置的颜色是什么? 我想在 tableView 的选择移动到另一个单元格时调用这个类。我不能用 didSelecrRowAtIndexPath 做到这一点,因为有时单元格颜色应该改变,尽管如果用户没有点击单元格,就像一个 segue。 【参考方案1】:

indexPath 是一个对象,它被创建并传递给 UITabelViewDelegate 或 UITableViewDataSource 方法。它可以让您指示加载/点击了哪个单元格等。

因此您将无法从外部访问此对象。如果您想更改单元格的某些内容,例如backgroundColor 您应该将颜色存储在属性中,更改此属性并强制重绘。在创建单元格的委托方法中,使用此属性设置颜色。

这是一些示例代码。

视图控制器

class TestTableViewController: UIViewController, UITableViewDelegate 

    // Store array of color
    var backColors = [UIColor.redColor(), UIColor.greenColor()]


    // Method which changes color
    func setColor(row: Int, color: UIColor) 
        backColors[row] = color
    

    // Override draw
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        // Create your cell
        // ...

        // Set color
        cell.backgroundColor = backColors[indexPath.row]
    

【讨论】:

是的,我想更改单元格的背景颜色。所以我应该强制重新加载 tableView,然后在 cellforRowAtIndexPath 中设置颜色? 我会这样做。将颜色存储在控制器中,强制重绘并在 cellforRowAtIndexPath 方法中使用此颜色。

以上是关于在任何 tableView 函数之外获取索引路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 segue 准备功能中访问 TableView 索引路径?

重新加载 ViewController 中的 tableview 让我在索引路径的 cellforRow 中出现“致命错误:索引超出范围”

如何根据uitableview中的部分获取索引路径?

获取节索引路径和编辑节标题

tableview 更新错误索引路径的单元格

tableview单元格索引路径的选择