Swift Error convertPoint(CGPoint,to:UITableView)

时间:2016-11-07 05:30:30

标签: swift uitableview swift3 nsindexpath cgpoint

所以我有一个自定义tableview,在该tableview中我有一个按钮,一个图像和2个标签。这些项中的每一个都使用php从mysql服务器填充json数据。我将我的项目从Objective-C转换为Swift,这样做我得到了这个错误。这是我项目中最重要的代码之一,因为用户单击跟随按钮后会将数组移动到其他数组,并且这样做会为单元格提供一个特殊的行号,以便所有图像,标签和按钮知道哪个是显示的。

我尝试将其切换为.convert(),但只是错误,所以我将其保留为原始状态。

按钮的代码

// Follow Button
@IBAction func followButtonClick(_ sender: Any) {

// Adding row to tag
var buttonPosition = (sender as AnyObject).convertPoint(CGPoint.zero, to: self.myTableView)
var indexPath = self.myTableView.indexPathForRow(at: buttonPosition)!

// Creating an action per tag
if indexPath != nil {

    // Showing Status Labels
    var cell = self.myTableView.cellForRow(atIndexPath: indexPath)!
    cell.firstStatusLabel.isHidden = false
    cell.secondStatusLabel.isHidden = false

    // Change Follow to Following
    (sender as AnyObject).setImage(UIImage(named: "follow.png")!, for: .normal)
    cell.followButton.isHidden = true
    cell.followedButton.isHidden = false
    self.myTableView.beginUpdates()

    // ----- Inserting Cell to Section 0 -----
    followedArray.insert(testArray[indexPath.row], at: 0)
    myTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade)

    // ----- Removing Cell from Section 1 -----
    testArray.remove(at: indexPath.row)
    var rowToRemove = indexPath.row
    self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: true)

    self.myTableView.endUpdates()

 }
}

错误

error picture

新代码错误

图片因此更易于阅读

error

error 3

error 4

2 个答案:

答案 0 :(得分:3)

convertPoint在Swift 3中更改为convert(_:to:)

var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)

查看Apple Documentation了解详情。

修改

首次警告而不是usinf indexPath != nil,您需要使用if let,并且对于该标签错误,您需要将您的单元格转换为您正在使用的customCell。

var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)
if let indexPath = self.tblSubscriber.indexPathForRow(at: buttonPosition) {
     //Cast your `UITableViewCell` to CustomCell that you have used
     var cell = self.myTableView.cellForRow(atIndexPath: indexPath) as! CustomCell 
}

对于deleteRows错误,您需要指定UITableViewRowAnimation而不是truefalse

self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: .automatic)

有关UITableViewRowAnimation检查文档的详细信息。

答案 1 :(得分:1)

如果您在swift3中尝试此代码,则上述方法将更新为 func convert(_ point: CGPoint, from view: UIView?) -> CGPoint您可以像这样使用它

var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)

我在Playground中检查了它,它正在运行。