为啥我在 swift 中调用 getIndex(cell: TableViewCell1) 函数时出错?

Posted

技术标签:

【中文标题】为啥我在 swift 中调用 getIndex(cell: TableViewCell1) 函数时出错?【英文标题】:Why am I getting an error on calling getIndex(cell: TableViewCell1) function in swift?为什么我在 swift 中调用 getIndex(cell: TableViewCell1) 函数时出错? 【发布时间】:2020-08-01 14:54:58 【问题描述】:

我正在尝试获取我在视图控制器中使用此函数的单元格的indexpath

func getIndex(cell : TableViewCell1) -> IndexPath
    
       let x = cell.cellTextField.convert(CGPoint.zero, to: self.tableView)
        let indexPath = self.tableView.indexPathForRow(at: x)
        return indexPath!
    
    

它工作正常,但是当我尝试将此函数返回的值用于我的 IBAction 方法时:

  @IBAction func tapButton(_ sender: UIButton) 
let indexPath1 = getIndex(cell: TableViewCell1)
    

我收到了这个错误

无法将“TableViewCell1.Type”类型的值转换为预期的参数类型“TableViewCell1”。

在这方面需要帮助。如果这是一个非常基本的问题,请原谅我,因为我是 swift 的初学者。

【问题讨论】:

不,我没有像 TableviewCell1 这样的变量名。我找不到我应该传递什么作为参数才能调用提到的函数并获取索引路径。 参数cell 必须是单元格(实例),而不是类型。顺便说一句,确定索引路径的几何数学是最糟糕的方法之一。 最快捷的方式是回调闭包。 getIndex 函数需要一个 TableViewCell1 的实例,但你传递了一个类 typeTableViewCell1 哦,我的错。基本上我已经尝试过另一种方法来使用自定义表格视图单元格中的单元格的“标签”来获取索引路径,如下所示:func textFieldDidBeginEditing(_ textField: UITextField) -> Int let row = cellTextField.tag return row 。但我无法使用在视图控制器获取行索引路径的操作方法中。请你帮我解决这个@vadian 如何创建 Tableviewcell1 的实例以在函数中传递。@aiwiguna 【参考方案1】:

错误消息说该方法获取了一个类型为 TableViewCell1 的对象,但您给出了类型定义。

如果方法 tapButton 在 TableViewCell1 的子类中,那么

class TableViewCell1: UITableViewCell 
    @IBAction func tapButton(_ sender: UIButton) 
        let indexPath1 = getIndex(cell: self)
    

【讨论】:

嗨,谢谢你的回答。但是我的 tapButton 方法在 TableviewCell1 的子类之外,因为它不在 TableView 中。请你给我一些建议,以便我可以在这个函数中调用提到的方法我获取 indexpath 的场景。

以上是关于为啥我在 swift 中调用 getIndex(cell: TableViewCell1) 函数时出错?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 iOS 上从 Swift 调用服务时收到 SSL 错误?

为啥在 Swift 中 CollectionView 函数被调用了两次?

为啥我在实现委托以将值从子 swift 类传递给父目标 C 类时出错?

为啥我不能在 Swift 中调用 UIViewController 上的默认 super.init()?

为啥函数调用需要 Swift 中的参数名称?

为啥 Swift 中的 print() 不会在目标 C 中将时间戳记录为 NSLog